1

我有以下表结构:

表:CashStatus(“ATM”可以有重复条目)

ATM  Cash   Device
A01  55     BASE
A01  1      IST
A02  1      BASE
A02  78     IST

表:ATM(ATM 列的唯一条目)

ATM   DEVICE
A01   BASE
A02   IST

我只想从CashStatus表中检索ATM & DeviceColumn 与ATMTable匹配的那些行

我做了一些研究并尝试了以下查询:-

SELECT *
  FROM CashStatus 
 WHERE EXISTS (SELECT 'X'
                 FROM ATM
                WHERE ATM = TermId collate SQL_Latin1_General_CP1_CI_AS
               AND DeviceName = Devicetype collate SQL_Latin1_General_CP1_CI_AS);

但它给出了错误:Expression type int is invalid for COLLATE clause.

4

4 回答 4

4
SELECT columnLists
FROM CashStatus cs JOIN ATM a ON cs.ATM = a.ATM AND cs.Device = a.Device

COLLATE 是用于更改列的语言排序规则的关键字;数字数据类型从来没有必要,在这里可能也没有必要(因为您要从一种语言更改为同一种语言)。

于 2012-10-28T14:06:12.817 回答
2

您应该能够使用 2 列连接两个表:

SELECT a.*
FROM CashStatus a
INNER JOIN ATM b ON a.ATM = b.ATM AND a.DEVICE = b.DEVICE

这会给你想要的结果吗?

于 2012-10-28T14:02:31.750 回答
1
SELECT *
FROM CashStatus
LEFT JOIN ATM ON CASHSTATUS.ATM=ATM.ATM and CASHSTATUS.DEVIDE=ATM.DEVICE
于 2012-10-28T14:04:10.887 回答
0

有几个答案基本相同的观点,每个观点都收到一个神秘的评论,即结果不符合预期。也许您可以提供正确输出的示例。以下是一个完整的示例:

declare @CashStatus as Table ( ATM VarChar(3), Cash Int, Device VarChar(4) )
insert into @CashStatus ( ATM, Cash, Device ) values
  ( 'A01', 55, 'BASE' ),
  ( 'A01',  1, 'IST' ),
  ( 'A02',  1, 'BASE' ),
  ( 'A02', 78, 'IST' )

declare @ATM as Table ( ATM VarChar(3), Device VarChar(4) )
insert into @ATM ( ATM, Device ) values
  ( 'A01', 'BASE' ),
  ( 'A02', 'IST' )

select CS.ATM, CS.Cash, CS.Device
  from @CashStatus as CS inner join
    @ATM as A on A.ATM = CS.ATM and A.Device = CS.Device
于 2012-10-28T14:57:34.260 回答