執行它你的意思是假設你有一個表,如下所示
CREATE TABLE bits
(
id INT PRIMARY KEY,
col1 BIT,
col2 BIT,
col3 BIT,
col4 BIT
)
填充的如下
INSERT INTO bits
VALUES (1,0,0,0,0),
(2,1,1,1,1),
(3,1,1,0,0)
而你通過字符串
DECLARE @ColumnsList VARCHAR(MAX) = 'col1,col2,col3'
您想獲得第2行,因爲這是唯一一個所有這些列的值爲1
?
如果可能動態SQL或某種按位查詢將是最明智的解決方案。與此同時,這裏沒有一個解決方案。
SELECT id
FROM bits UNPIVOT(val FOR col IN (col1, col2, col3, col4)) unpvt
JOIN (SELECT col
FROM (SELECT CAST('<c>' + REPLACE(@ColumnsList, ',', '</c><c>') + '</c>' AS XML) AS x) x
CROSS APPLY (SELECT t.split.value('.', 'sysname') AS col
FROM x.nodes('/c') t(split)) ca) cols
ON cols.col = unpvt.col
GROUP BY id
HAVING COUNT(CASE
WHEN val = 0 THEN 1
END) = 0
我不確定,但它聽起來像你可能想要看看動態sql ...你是否想要選擇列名稱的變量列表? – FrustratedWithFormsDesigner 2011-03-08 15:41:55
什麼'WHERE @ColumnsList = True'甚至意味着什麼? – 2011-03-08 15:45:29
@ColumnsList =「var1,var2,var3」我想要比較@ColumnsList中的每個var,其中每個var = true。這就是我的意思是 – 2011-03-08 16:37:17