SQL子查询分析

SQL子查询分析,sql,sql-server,Sql,Sql Server,我有一个如下表,希望基于子查询(例如sql)执行分析 从表1中选择,其中Value Param.internal>Value Param.external 这不起作用: SELECT * FROM Table1 WHERE [Values] IN ( SELECT [Value] FROM Table1 WHERE Param= 'internal' > SELECT [Value] FROM Table1 WHERE Param= 'e

我有一个如下表,希望基于子查询(例如sql)执行分析

从表1中选择,其中Value Param.internal>Value Param.external

这不起作用:

SELECT * FROM Table1 
WHERE [Values] IN ( 
    SELECT [Value] 
    FROM Table1 
    WHERE Param= 'internal' > 
    SELECT [Value] 
    FROM Table1 WHERE Param= 'external'
    ) 
SELECT * 
FROM Table1 
WHERE [Values] IN (SELECT [Value] 
                   FROM Table1 
                   WHERE Param= 'internal' > SELECT [Value] FROM Table1 WHERE Param= 'external') 
这不起作用:

SELECT * FROM Table1 
WHERE [Values] IN ( 
    SELECT [Value] 
    FROM Table1 
    WHERE Param= 'internal' > 
    SELECT [Value] 
    FROM Table1 WHERE Param= 'external'
    ) 
SELECT * 
FROM Table1 
WHERE [Values] IN (SELECT [Value] 
                   FROM Table1 
                   WHERE Param= 'internal' > SELECT [Value] FROM Table1 WHERE Param= 'external') 
我想你是想找一个部门,内部栏目比外部栏目大

试试这个:

select Department
    ,sum(case when Param = 'internal' then Value else 0 end) as Internal
    ,sum(case when Param = 'external' then Value else 0 end) as External
    ,sum(case when Param = 'others' then Value else 0 end) as Others
    --Added based on comment
    , (SELECT COUNT(DISTINCT Department) from Table1) as CtDistinctDept
    ,sum(Value) as DeptTotal
from table1
group by department
--optional
having sum(case when Param = 'internal' then Value else 0 end)
      > sum(case when Param = 'external' then Value else 0 end)

我将使用EXISTS编写查询:

SELECT *
FROM Table1 t1
WHERE Param = 'internal'
AND EXISTS
(SELECT 1
 FROM Table1 t2
 WHERE Param = 'external'
 AND t1.Department = t2.Department
 AND t1.value > t2.value)
因此,基本上返回所有行,其中:

参数=内部和外部 还有一行具有相同的部门名称,其中param=external,且外部值小于内部值 根据您上面的样本数据,第二部门将被退回

根据评论进行编辑: 如果要显示部门的所有行,只需将上面的行连接回主表,如下所示:

SELECT main.*
FROM Table1 main
INNER JOIN
(SELECT t1.Department
 FROM Table1 t1
 WHERE Param = 'internal'
 AND EXISTS
 (SELECT 1
  FROM Table1 t2
  WHERE Param = 'external'
  AND t1.Department = t2.Department
  AND t1.value > t2.value) sub
ON main.Department = sub.Department

你的问题是什么?您编写并发现什么代码没有提供您期望的输出?您需要透视您的Param col,然后使用where子句。看,这就是你要问的。这不起作用:从表1中选择*,其中[Value]在表1中选择[Value],其中Param='internal'>从表1中选择[Value],其中Param='external',我喜欢这个方法,但它在报告中只显示“internal”参数。当条件满足时,是否可以显示所有参数?完美。谢谢你的解决方案。我已将countDistinctDepartment添加为Count,但答案始终为1。是否可以获取查询返回的所有部门的完整计数?@user3359706。不知道它有什么帮助,但我加了它。我还加了一个总数,我想你可能会要求。太好了。谢谢