Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 行级别上不同的_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 行级别上不同的

Sql 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 (

看起来很容易

我使用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
(
    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)?不客气。是的,现在是,因为它在
组中使用