8

我有一个看法。我怎样才能只显示不同的记录。有 19 列。我想以单一方式显示所有内容而没有任何重复,并且我不想删除重复项。我要求它仅用于查看目的。

        SELECT DISTINCT([Complaint Number]),[Complaint_For],[Total_Complaint_Qty]
        ,[Defects],[Customer Code ],[Location],[CutomerName],[KUNUM],[QMNUM]
        ,[Responsible_KAM] 
        FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]

如果我使用前面的查询,它会返回 1000 条记录。但是,如果我使用以下查询,它会返回没有重复的准确记录。但我希望显示所有列。

        SELECT DISTINCT([Complaint Number])
        FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]
4

3 回答 3

11

您必须有部分/所有投诉编号的重复记录,因此DISTINCT无法使用。考虑一个简单的表,例如

Column1    |    Column2
-----------+------------
A          |    X
A          |    Y

如果您只需要 Column1 = A 的一条记录,SQL 无法知道是将 X 还是 Y 放入 Column2。这与您遇到的问题相同,但有 19 列,而不是 2 列。您需要实施某种逻辑来确定每个投诉编号将显示哪一行。因此,对于上表,如果我希望 X 在 Column2 中显示,我将使用以下查询:

SELECT  Column1,
        Column2
FROM    (   SELECT  Column1,
                    Column2,
                    ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
            FROM    MyTable
        ) t
WHERE   RowNumber = 1

在这里,我使用该ROW_NUMBER()功能对每一行进行优先级排序,然后仅显示具有最高优先级的行。如果我不在乎它们以什么顺序出现,我可能会使用这样的东西来随机选择一行。

ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]

由于我不知道将什么逻辑应用于您的查询,我无法准确发布您需要的内容,但我可以尝试让您开始:

SELECT  [Complaint Number],
        [Complaint_For],
        [Total_Complaint_Qty],
        [Defects],
        [Customer Code ],
        [Location],
        [CutomerName],
        [KUNUM],
        [QMNUM],
        [Responsible_KAM]
FROM    (   SELECT  [Complaint Number],
                    [Complaint_For],
                    [Total_Complaint_Qty],
                    [Defects],
                    [Customer Code ],
                    [Location],
                    [CutomerName],
                    [KUNUM],
                    [QMNUM],
                    [Responsible_KAM],
                    ROW_NUMBER() OVER(PARTITION BY [Complaint Number] ORDER BY Complaint_For, Defects) AS RowNumber
            FROM    [CCCMPREPOSITORY].[dbo].[VW_Final_]
        ) data
WHERE   RowNumber = 1

您只需要摆弄函数ORDER BY内部ROW_NUMBER即可满足您的需求。

于 2012-05-24T08:48:28.457 回答
1

尝试:

SELECT [Complaint Number], MAX([Complaint_For]), MAX([Total_Complaint_Qty]), ...
FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]
GROUP BY Complaint Number
于 2012-05-24T08:47:05.367 回答
0

不要()用于distinct. 只需使用:

select distinct col1, col2 .. from your_table
于 2012-05-24T08:36:39.753 回答