对于SQL来说,我有点像菜鸟,所以请原谅我,如果这很明显的话。 我想找到Customer字段的副本,以及包含它们的FULL记录。
注意: 我正在使用MS SQL Server 2005.
在我提出以下内容之前,我尝试将其作为单个SQL Select语句实现:
SELECT ModTab.* from modTab
WHERE Customer IN (SELECT Customer
FROM ModTab
GROUP BY Customer
HAVING COUNT(Customer) > 1
)
ORDER BY Customer
最初我尝试了十几种不同的变体:
SELECT ModTab.*
FROM ModTab
GROUP BY Customer,<ALL other fields...>
HAVING COUNT(Customer) > 1
是否有类似第二种方法可以完成同样的事情? (加上Group by子句对我来说似乎没有意义吗?我不清楚为什么需要或使用它。)
答案 0 :(得分:1)
试试这个:
select modTab.*
from ModTab
join (
select Customer, count(*)
from Modtab
group by Customer
) B on B.Customer = ModTab.Customer
order b Customer
我相信现在这也解释了小组的必要性。
答案 1 :(得分:0)
如果使用支持分析功能的RDBMS(例如SQLServer),请尝试:
select * from
(select m.*, count(*) over (partition by customer) cnt
from Modtab m) ilq
where cnt > 1
否则,请尝试:
select m.*
from Modtab m
where exists
(select 1
from Modtab l
where m.customer = l.customer and m.id <> l.id)
(将id
替换为Modtab的合适主键字段。)
答案 2 :(得分:0)
WITH numbered
AS ( SELECT *, row_number() OVER ( PARTITION BY customer ORDER BY customer ) AS nr FROM ModTab)
Select * from numbered WHERE nr >1