将SQL Select语句组合到一个Select语句中? (简化)。

时间:2013-03-13 19:09:29

标签: sql select count

对于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子句对我来说似乎没有意义吗?我不清楚为什么需要或使用它。)

3 个答案:

答案 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