我有臺這樣的獲得多行從行單元格值
Id Flag1 Flag2 Desc
-- ----- ------ -----
1 1 1 XXX
2 1 0 YYY
,我想造成這樣的
Id Flag1 Flag2 Desc
-- ----- ------ -----
1 1 1 XXX
1 1 1 XXX
2 1 0 YYY
其中用於標記每個條目是真的。
如何做到這一點?
我有臺這樣的獲得多行從行單元格值
Id Flag1 Flag2 Desc
-- ----- ------ -----
1 1 1 XXX
2 1 0 YYY
,我想造成這樣的
Id Flag1 Flag2 Desc
-- ----- ------ -----
1 1 1 XXX
1 1 1 XXX
2 1 0 YYY
其中用於標記每個條目是真的。
如何做到這一點?
UPDATE
既然你有16個標誌列,你可以使用一個數字表像這樣以減少總UNION ALL
查詢。只需在一行中添加總標誌並將其與Numbers表的row_number
進行比較即可。
查詢
;WITH Numbers AS (SELECT 1 rn UNION ALL SELECT 1 rn UNION ALL SELECT 1 rn UNION ALL SELECT 1),
Numbers1 AS (SELECT ROW_NUMBER()OVER(ORDER BY c1.rn) as rn FROM Numbers c1 CROSS JOIN Numbers c2)
SELECT Id, Flag1, Flag2, [Desc] FROM flagtable
INNER JOIN Numbers1 N ON N.rn <= CONVERT(INT,flag1) + CONVERT(INT,flag2)
ORDER BY Id ASC
您可以使用UNION ALL
。像這樣的東西。
查詢
SELECT Id, Flag1, Flag2, [Desc] FROM flagtable WHERE Flag1 = 1
UNION ALL
SELECT Id, Flag1, Flag2, [Desc] FROM flagtable WHERE Flag2 = 1
ORDER BY Id
輸出
Id Flag1 Flag2 Desc
1 1 1 XXX
1 1 1 XXX
2 1 0 YYY
謝謝。它的工作,但假設有大約16個標誌列。我需要檢查他們 –
WITH tbl(id,flag1,flag2,cnt,descp,idx) AS
(SELECT id,
flag1,
flag2,
CASE
WHEN Flag1=1
AND Flag2 =1
THEN 2
ELSE 1
END cnt,
descp,
1
FROM test2
UNION ALL
SELECT a.id,
a.flag1,
a.flag2,
b.cnt,
a.descp,
b.idx+1
FROM test2 a
JOIN tbl b
ON (a.id =b.id
AND b.idx+1 <= b.cnt)
)
SELECT * FROM tbl ORDER BY id
查詢結果集的
不知道我理解的問題...你想通過2項與FLAG 2 = 1相乘? –
您的結果尚不清楚。 –
僅使用2個標誌?只乘以2或更多? – Susilo