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

Tableと同様にColumnが一致するCashStatusテーブルからの行のみを取得したいATM & DeviceATM

私はいくつかの調査を行い、次のクエリを試しました:-

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 に答える