SQL代码看起来很复杂

时间:2017-11-06 18:10:21

标签: sql sql-server

测试表

create table Test (
Id integer,  
Store_N  varchar(25),
Department varchar(25)  
);

INSERT INTO Test (Id, Store_N, Department )
Values (25,'1','A'),  (67,'1','A'),  (34,'1','A'), (97,'1','C'),
(21,'1','C'),  (268,'1','B'),  (456,'2','A'), (349,'2','A'),
(935,'2','B'),  (36,'3','B'),  (637,'3','B'), (388,'3','B'),
(891,'3','B'),  (344,'4','A'),  (763,'4','A'), (836,'4','A')


SELECT * , ROW_NUMBER() OVER( Partition BY Store_N ORDER BY Store_N ) AS AA 
FROM Test; 

结果是

enter image description here

我需要排除所有只有一个部门并且每个商店都有唯一DISTINCT部门的商店。结果看起来像这样

enter image description here

这是代码

SELECT DISTINCT TB4.Department, TB4.Store_N
From
(
SELECT TB0.Store_N, TB0.Department FROM Test TB0
INNER JOIN 
(
SELECT TB2.Store_N , Count(*) AS AA1
FROM
    (    
     SELECT  DISTINCT TB1.Department , TB1.Store_N 
     FROM  
        ( SELECT * , ROW_NUMBER() OVER( Partition BY Store_N ORDER BY Store_N )  AA 
         FROM Test ) TB1  
    ) TB2
    group by TB2.Store_N
    HAVING 
    COUNT(*) > 1 ) TB3 
ON TB0.Store_N = TB3.Store_N
) TB4

现在问题如何简化这段代码?

谢谢

2 个答案:

答案 0 :(得分:1)

你基本上可以这样做:

public class RequestContextHandler : IRequestContextHandler
{
    public ICookieManager GetCookieManager()
    {
        return null;
    }

    public bool OnBeforePluginLoad(string mimeType, string url, bool isMainFrame, string topOriginUrl, WebPluginInfo pluginInfo, ref PluginPolicy pluginPolicy)
    {

        bool blockPluginLoad = pluginInfo.Name.ToLower().Contains("flash");
        if (blockPluginLoad)
        {
            pluginPolicy = PluginPolicy.Disable;
        }
        return blockPluginLoad;
    }
} 

但是,您想要排除只有一个部门的商店,所以让我们做一个计数:

select store_n, department
from test
group by store_n, department;

Here是一个SQL小提琴。

答案 1 :(得分:1)

你需要很长时间才能获得" GROUP BY"的功能。条款

SELECT TB2.Store_N , TB2.Department
FROM
    (    
     SELECT  Department , Store_N, count(Id) as c 
     FROM  Test
     GROUP BY Department, Store_N) as TB2
WHERE TB2.c > 1