2017-05-02 8 views
-1

このクエリは正常に動作します。SQL IN句複数の列と複数の値

SELECT * FROM TABLE WHERE 330110042 IN (iItem01,iItem02,iItem03,iItem04,iItem05,iItem_1,iItem_2,iItem_3,iItem_4,iItem_5,iItem_6,iItem_7,iItem_8,iItem_9,iItem_10,iItem_11,iItem_12,iItem_13,iItem_14,iItem_15,iItem_16,iItem_17,iItem_18,iItem_19,iItem_20,iItem_21,iItem_22,iItem_23,iItem_24,iItem_25,iItem_26,iItem_27,iItem_28,iItem_29,iItem_30) 

しかし、このクエリは機能しませんでした。

SELECT * FROM TABLE WHERE 330110042, 330110002, 330110002 IN (iItem01,iItem02,iItem03,iItem04,iItem05,iItem_1,iItem_2,iItem_3,iItem_4,iItem_5,iItem_6,iItem_7,iItem_8,iItem_9,iItem_10,iItem_11,iItem_12,iItem_13,iItem_14,iItem_15,iItem_16,iItem_17,iItem_18,iItem_19,iItem_20,iItem_21,iItem_22,iItem_23,iItem_24,iItem_25,iItem_26,iItem_27,iItem_28,iItem_29,iItem_30) 

私はSQL Serverでどのように動作しますか?

+0

sql-serverは1つの単語です – maSTAShuFu

+1

は330110042,330110002,330110002の有限リストですか? – maSTAShuFu

+1

ようこそStackOverflowへ。 [ツアー]を取ってください。 よくある質問stackoverflow.com/help/how-to-ask、 [mcve]を作成してください。 MCVEには、さまざまなサンプル入力(すべての側面を示す)と望ましい出力が含まれている必要があります。 SQLの場合、MCVEには、いくつかの行の 'CREATE TABLE ...'と 'INSERT INTO ...'があり、これを使って演奏する玩具データベースを定義します。 – Yunnosch

答えて

1

正確な目標はここでは分かりませんが、値リストを独自のテーブル構造にすることも可能です。共通テーブル式は、うまくいくかもしれない:

;WITH Ids AS 
(
    SELECT 330110042 AS Id 
    UNION ALL 
    SELECT 330110002 
) 
SELECT t.* 
FROM [Table] t 
INNER JOIN Ids i ON t.iItem01 = i.Id OR t.iItem02 = i.Id OR... 

しかし、多分UNPIVOTとソリューションは、よりエレガントになります。もちろん

;WITH Unpivoted AS 
(
    SELECT Id, ColName, ColValue 
    FROM (SELECT Id, iItem01, iItem02, iItem03 
      FROM [Table] t) p 
    UNPIVOT 
    (ColValue FOR ColName IN (iItem01, iItem02, iItem03)) AS unpvt 
) 
SELECT t.* 
FROM [Table] t 
WHERE EXISTS (SELECT 1 FROM Unpivoted u 
       WHERE t.Id = u.Id 
       AND u.ColValue IN (330110042, 330110002)) 

、あなたが必要なすべての列を追加します。私はあなたのテーブルがIdと呼ばれる主キー列を持っていると推定します。私はこの例の最初の3つだけを追加しました。