Return 仅来自 Table 的唯一行
Return only unique rows from a Table
我有一个 table 有 4 列和 7 行。
此 table 包含 1 个具有相同 ID 的客户 LNAME
和 FNAME
。
此外 table 有 2 个客户 ID 相同,但 LNAME
或 FNAME
不同。
那是销售代表输入错误。理想情况下,我的 table 应该只有 2 行(ID_pk 3 和 7 的行)
我需要从上面得到以下结果集 table:
所有 唯一行 所有四列(行 ID_pk 3 和 7) . (不包括下面列出的案例 #3)
所有四列重复(行ID_pk 3 和 8)。
所有重复 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
我有一个 table 有 4 列和 7 行。
此 table 包含 1 个具有相同 ID 的客户 LNAME
和 FNAME
。
此外 table 有 2 个客户 ID 相同,但 LNAME
或 FNAME
不同。
那是销售代表输入错误。理想情况下,我的 table 应该只有 2 行(ID_pk 3 和 7 的行)
我需要从上面得到以下结果集 table:
所有 唯一行 所有四列(行 ID_pk 3 和 7) . (不包括下面列出的案例 #3)
所有四列重复(行ID_pk 3 和 8)。
所有重复 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