![](/img/trans.png)
[英]How to convert one column values to two different column values based on other column in SQL Server?
[英]Different values of column 1 based on column 2 SQL Server
我有一個帶有ID
和Val
列的表。 對於每個ID
值,我們可以具有相同或不同的Val
值。
ID Val
1 A
1 NULL
2 00
2 00
2 00
2 00
3 00
3 A
4 A
5 00
5 00
5 A
6 A
6 A
6 NULL
6 00
從上表中,我正在尋找在Val列中具有不同值的ID。 如果對於任何給定的ID,Val列的所有值都相同,則不應得出結果。
因此結果將是類似的。
D Val
1 A
1 NULL
3 00
3 A
5 00
5 00
5 A
6 A
6 A
6 NULL
6 00
Id 2不應出現在結果中,因為對於Id 2,Val列具有相同的數據。 同樣,由於ID 4只有一行,因此不會出現ID 4的結果。
對於每個ID,如果我們在Val列中有多個值,那么它應該顯示在結果中。
謝謝您的幫助!
對於滿足具有不同值條件的ID:
select id
from t
group by id
having min(id) <> max(id);
然后可以將其合並到查詢中,如下所示:
select t.*
from t join
(select id
from t
group by id
having min(id) <> max(id)
) tt
on t.id = tt.id;
或者,您可以使用窗口功能:
select t.id, t.val
from (select t.*,
min(val) over (partition by id) as minval,
max(val) over (partition by id) as maxval
from t
) t
where minval <> maxval;
嘗試這個:
SELECT ID, Val
FROM mytable
WHERE ID IN (SELECT ID
FROM mytable
GROUP BY ID
HAVING COUNT(DISTINCT CASE
WHEN Val IS NULL THEN ''
ELSE Val
END) > 1
我假設Val
字段是VARCHAR
類型,並且可以是NULL
或<> ''
。
通過三個步驟構建查詢:
嘗試使用內部選擇而不是子選擇來加快查詢速度。
解決方案寫在下面的查詢中:
SELECT
t.*
FROM
-- select only ids with distinct count > 1
(
SELECT
id
FROM
-- select distinct values to ensure your count of null values is real
(
SELECT DISTINCT
id, val
FROM
t
) AS td
GROUP BY
id
HAVING
COUNT(*) > 1
) AS tc
-- join the source table
INNER JOIN
t
ON
t.id = tc.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.