我有一个包含4列和7行的表。
此表包含1个具有相同ID LNAME
和FNAME
的客户。
此外,该表还有2位客户具有相同的ID,但LNAME
或FNAME
不同。
这是销售代表输入错误。理想情况下,我的表应该只有2行(ID_pk 3和7的行)
我需要从上表中得到以下结果集:
所有四列的所有唯一行(行ID_pk 3和7 )。 (不包括下面列出的案例#3 )
所有四列的所有重复(行ID_pk 3和8 )。
所有重复的Customer_ID但不匹配LNAME和/或FNAME(行ID_pk 1,2,4和5)(这些行必须发送回销售代表进行验证。)
答案 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以获得您寻求的其他结果。