SQL子查询分析
我有一个如下表,希望基于子查询(例如sql)执行分析 从表1中选择,其中Value Param.internal>Value Param.external 这不起作用: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
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。不知道它有什么帮助,但我加了它。我还加了一个总数,我想你可能会要求。太好了。谢谢