Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在组中查找重复项-SQL 2008_Sql_Database_Sql Server 2008 - Fatal编程技术网

如何在组中查找重复项-SQL 2008

如何在组中查找重复项-SQL 2008,sql,database,sql-server-2008,Sql,Database,Sql Server 2008,我有一个包含以下数据的表(MyTable)。(按订单号、类别、类型排序) 我需要做的是,浏览表格,看看是否有任何“类别”有多个“主要单元”。 如果是,则对整个类别发出警告。预期结果应该是这样的 Order _No Category Type Warning Ord1 A Main Unit Ord1 A Other Ord1 A Other Ord2 B Main Unit More than one Main

我有一个包含以下数据的表(MyTable)。(按订单号、类别、类型排序)

我需要做的是,浏览表格,看看是否有任何“类别”有多个“主要单元”。 如果是,则对整个类别发出警告。预期结果应该是这样的

Order _No   Category    Type      Warning
Ord1    A   Main Unit   
Ord1    A   Other   
Ord1    A   Other   
Ord2    B   Main Unit     More than one Main Units
Ord2    B   Main Unit     More than one Main Units
Ord2    B   Other     More than one Main Units
我尝试了几种方法(使用子查询)来获得结果,但没有成功。请帮忙

(Case
 When (Select t1.Category
             From MyTable as t1 
    Where  MyTable.Order_No = t1.Order_No
                    AND MyTable.Category = t1. Category
        AND  MyTable.Type = t1.Type
               AND  MyTable.Type = ‘Main Unit’
    Group by t1. t1.Order_No, t1. Category, t1.Type
Having  Count(*) >1) = 1
Then ‘More than one Main Units’
Else ‘’ End ) as Warning

一个选项是使用
COUNT()OVER()
对主要单元进行计数,按类别进行划分

SELECT Order_No, Category, Type, 
  CASE WHEN COUNT(CASE WHEN Type='Main Unit' THEN 1 ELSE NULL END) 
            OVER (PARTITION BY Category) > 1 
       THEN 'More than one Main Units' ELSE '' END Warning
FROM MyTable

.

是否需要列出所有记录

如果您只需要副本,可以执行以下操作:

select Order_No, Category, Type, count(*) as dupes
from MyTable
where Type='Main Unit'
group by Order_No, Category, Type
having count(*)>1
order by count(*) DESC;

另一种方法是使用CTE。这是我的建议


另一个选项是使用
存在

select [Order], _No, Category, Type, 
    (case when exists (
        select 1 from mytable t2
        Where category = 'main unit'
        and t2.[Order] = t.[Order] and t2._No = t._No
        group by [Order]
        having Count(*) > 1)
     then 'More than one Main Units'
     else '' end) as Warning
From MyTable t

它对约阿希姆有效。非常感谢你让我开心。祝你2014年快乐!!我试过了,这也行!谢谢。多亏了像你这样的人,我每天都能学到一些东西1.我选了第一个。。但是谢谢你的帮助我第一次去。。但是谢谢你的帮助
   ;with categoriesWithMoreThanOneType as
   (
      select category, order_type
      from
        mytable
      where 
        order_type = 'Main Unit'
      group by category, order_type
      having count(1) > 1
   )

   select
     m.*, 
     case 
       when c.order_type is null then ''
       else
        'More than one ' + c.order_type 
     end as Warning
   from 
      mytable m 
      left outer join categoriesWithMoreThanOneType c on 
         m.category = c.category
select [Order], _No, Category, Type, 
    (case when exists (
        select 1 from mytable t2
        Where category = 'main unit'
        and t2.[Order] = t.[Order] and t2._No = t._No
        group by [Order]
        having Count(*) > 1)
     then 'More than one Main Units'
     else '' end) as Warning
From MyTable t