Sql server 2008 行级别上不同的
看起来很容易 我使用COALESCE得到下表。我需要在行级别执行distinctSql server 2008 行级别上不同的,sql-server-2008,tsql,Sql Server 2008,Tsql,看起来很容易 我使用COALESCE得到下表。我需要在行级别执行distinct 1 1 5 5 5 (null) 2 2 2 2 25 25 3 7 35 35 35 35 这就是我要找的 1 5 null 2 25 3 7 35 这里有一个演示这是我能想到的唯一方法。 目前没有足够的时间解释其操作,因此请在评论中发布问题 WITH DataCTE (RowID, a, b, c, d, e, f) AS (
1 1 5 5 5 (null)
2 2 2 2 25 25
3 7 35 35 35 35
这就是我要找的
1 5 null
2 25
3 7 35
这里有一个演示这是我能想到的唯一方法。 目前没有足够的时间解释其操作,因此请在评论中发布问题
WITH DataCTE (RowID, a, b, c, d, e, f) AS
(
SELECT 1, 1, 1, 5, 5, 5, NULL UNION ALL
SELECT 2, 2, 2, 2, 2, 25, 25 UNION ALL
SELECT 3, 3, 7, 35, 35, 35, 35
)
,UnPivotted AS
(
SELECT DC.RowID
,CA.Distinctcol
,OrdinalCol = ROW_NUMBER() OVER (PARTITION BY DC.RowID ORDER BY CA.Distinctcol)
FROM DataCTE DC
CROSS
APPLY (
SELECT Distinctcol
FROM
(
SELECT Distinctcol = a UNION
SELECT b UNION
SELECT c UNION
SELECT d UNION
SELECT e UNION
SELECT f
)DT
WHERE Distinctcol IS NOT NULL
) CA(Distinctcol)
)
SELECT RowID
,Col1 = MAX(CASE WHEN OrdinalCol = 1 THEN Distinctcol ELSE NULL END)
,Col2 = MAX(CASE WHEN OrdinalCol = 2 THEN Distinctcol ELSE NULL END)
,Col3 = MAX(CASE WHEN OrdinalCol = 3 THEN Distinctcol ELSE NULL END)
,Col4 = MAX(CASE WHEN OrdinalCol = 4 THEN Distinctcol ELSE NULL END)
,Col5 = MAX(CASE WHEN OrdinalCol = 5 THEN Distinctcol ELSE NULL END)
FROM UnPivotted
GROUP BY RowID
我想不出一个好方法来实现这一点,部分原因是我无法想象你到底为什么要返回你提到的数据集。多做一点解释可能会对您有所帮助。您可能需要使用
DISTINCT
。很抱歉问了一个难题。它从最终报告中删除了太多的垃圾。是每行中总是有3个不同的值,还是每列都有不同的值?行中可能有所有不同的值。一行中可能有一个值。谢谢MarkD。这正是我需要的。在DataCTE中是否需要RowID列(RowID,a,b,c,d,e,f)?不客气。是的,现在是,因为它在组中使用