仅返回表中的唯一行

时间:2016-05-08 19:41:51

标签: sql sql-server duplicates not-exists

我有一个包含4列和7行的表。

this is my table sample

此表包含1个具有相同ID LNAMEFNAME的客户。

此外,该表还有2位客户具有相同的ID,但LNAMEFNAME不同。

这是销售代表输入错误。理想情况下,我的表应该只有2行(ID_pk 3和7的行)

enter image description here

我需要从上表中得到以下结果集:

  1. 所有四列的所有唯一行行ID_pk 3和7 )。 (不包括下面列出的案例#3

  2. 所有四列的所有重复行ID_pk 3和8 )。

  3. 所有重复的Customer_ID但不匹配LNAME和/或FNAME(行ID_pk 1,2,4和5)这些行必须发送回销售代表进行验证。

2 个答案:

答案 0 :(得分:3)

这样做的东西很大程度上依赖于嵌套查询,GROUP BY子句和COUNT函数。

第1部分 - 唯一行

此查询将显示客户ID与数据匹配的所有行。

SELECT Customer_ID, Customer_FNAME, Customer_LNAME FROM dbo.customers WHERE Customer_ID IN (
    SELECT Customer_ID FROM (
        SELECT DISTINCT Customer_ID, Customer_FNAME, Customer_LNAME FROM dbo.customers
        GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME
    ) Customers
    GROUP BY Customer_ID
    HAVING COUNT(Customer_ID) = 1
)
GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME

第2部分 - 重复

此查询将显示多次输入相同数据的所有行。

SELECT Customer_ID, Customer_FNAME, Customer_LNAME
FROM dbo.customers
GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME
HAVING COUNT(Customer_ID) > 1

第3部分 - 数据不匹配

此查询与第一个查询基本相同,只是查找不同的COUNT值。

SELECT Customer_ID, Customer_FNAME, Customer_LNAME FROM dbo.customers WHERE Customer_ID IN (
    SELECT Customer_ID FROM (
        SELECT DISTINCT Customer_ID, Customer_FNAME, Customer_LNAME FROM dbo.customers
        GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME
    ) Customers
    GROUP BY Customer_ID
    HAVING COUNT(Customer_ID) > 1
)
GROUP BY Customer_ID, Customer_FNAME, Customer_LNAME

答案 1 :(得分:1)

您可以使用CTE(公用表格式):https://msdn.microsoft.com/en-us/library/ms175972.aspx

active

将为您提供示例输出。

您可以操纵CTE以获得您寻求的其他结果。