Return 仅来自 Table 的唯一行

Return only unique rows from a Table

我有一个 table 有 4 列和 7 行。

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

此外 table 有 2 个客户 ID 相同,但 LNAMEFNAME 不同。

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

我需要从上面得到以下结果集 table:

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

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

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

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

;WITH checkDup AS (
        SELECT Customer_ID, ROW_NUMBER() OVER (PARTITION BY Customer_ID ORDER BY Customer ID) AS 'RN'
        FROM Table)
        SELECT Customer_ID FROM checkDup
        WHERE RN = 1;

将为您提供示例输出。

您可以操纵 CTE 以获得您想要的其他结果。

做这样的事情在很大程度上依赖于嵌套查询、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