提问人:Sadia 提问时间:12/4/2017 最后编辑:marc_sSadia 更新时间:12/8/2017 访问量:1621
如何在 SQL Server 中子查询的 WHERE 子句中分配变量
How to assign a variable in the WHERE clause of a sub-query in SQL Server
问:
SELECT
Total_Males, SETTLEMENT_ID, URI, _PARENT_AURI
FROM
(SELECT
COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID, t1.URI,
t2._PARENT_AURI
FROM
PScData t1
INNER JOIN
PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE
t1.SETTLEMENT_ID = '11102002002001'
AND t2.SEX = '1'
GROUP BY
t1.URI, t2._PARENT_AURI, t1.SETTLEMENT_ID) tmp
这是我写的查询。在子句中,我给出了确切的值 - '11102002002001' - 我想与 .我该怎么做?请提供一些解决方案。WHERE
SETTLEMENT_ID
t1
此外,查询在两行中返回计数,即:现在针对两个不同的 ID 进行计数。如何将两个不同 id 的结果相加,得到子查询返回的这两行的总和?
答:
1赞
Shammas
12/4/2017
#1
您的意思是要与表 PScData 中的每个Settlement_id进行比较吗?
根据我对这个问题的理解,您可以在表 PScData 上进行自联接或使用以下查询。
此查询会将settlement_id与同一表中的所有settlement_ids进行比较。我不明白你为什么要这样做。
请检查脚本,如果我弄错了,请告诉我。
SELECT
SUM(Total_Males) [Total_males], SETTLEMENT_ID,URI, _PARENT_AURI
FROM
(SELECT
COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID, t1.URI,
t2._PARENT_AURI
FROM
PScData t1
INNER JOIN
PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE
t1.SETTLEMENT_ID in (SELECT DISTINCT SETTLEMENT_ID FROM PScData)
AND t2.SEX = '1'
GROUP BY
t1.URI, t2._PARENT_AURI, t1.SETTLEMENT_ID) tmp
group by
SETTLEMENT_ID,URI, _PARENT_AURI
评论
1赞
Sadia
12/4/2017
是的,你的答案是正确的。也可以在 where 子句“ t1 中这样完成。SETTLEMENT_ID = SETTLEMENT_ID 和 t2.性别 = '1' “ .我刚刚找到了 .please help for second part ,即:如何对通过 count .thanks 检索到的值求和
0赞
Shammas
12/4/2017
感谢您的评论萨迪亚。如果脚本对您有所帮助,您可能会接受此答案。再次感谢您的点赞。
0赞
Shammas
12/4/2017
让我知道您想获得总和的领域?
0赞
Sadia
12/4/2017
在查询 COUNT(t2.) 给出多个值,因为不同的 id,我想将 Count(t2.) 结果值添加到 1 个答案中
0赞
Shammas
12/4/2017
您按Settlement_ID分组,这是它显示基于结算 ID 的计数的原因。 如果您从 SELECT 列表和 GROUP BY 中删除settlement_id,您将收到总计数。
1赞
Bozhidar Stoyneff
12/4/2017
#2
子查询在这里无效。如果您不需要所有定居点,只需执行连接并过滤掉定居点。但是从您的问题中不清楚您是要过滤掉它们还是只是匹配它们。为了匹配,使用联接。
SELECT COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID, t1.URI, t2._PARENT_AURI
FROM PScData t1
INNER JOIN PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE t2.SEX = '1'
GROUP BY t1.URI, t2._PARENT_AURI, t1.SETTLEMENT_ID
如果您需要过滤掉它们,您需要准备想要的和解清单并在条款中使用。您可以使用公共表表达式来展开想要的结算列表,并将其传递到子句中:IN
WHERE
WHERE
WITH cteSettlements AS (
SELECT SETLLEMENT_ID
FROM PscData
WHERE ? -- apply some criteria
)
SELECT COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID, t1.URI, t2._PARENT_AURI
FROM PScData t1
INNER JOIN PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE t1.SETTLEMENT_ID IN cteSettlements AND t2.SEX = '1'
GROUP BY t1.URI, t2._PARENT_AURI, t1.SETTLEMENT_ID
至于第二个问题 - 如何将两个不同 ID 的结果相加以获得这两行的总和?- 你需要玩这个子句。据我了解,您实际上不需要分组,因此只需将其从 .请记住,您也需要将其从列表中删除。GROUP BY
SETTLEMENT_ID
GROUP BY
SELECT
1赞
Sadia
12/4/2017
#3
我找到了查询的解决方案,结果可以检索并总结如下:
SELECT Total_Males, SETTLEMENT_ID
FROM (
SELECT COUNT(t2.SEX) as Total_Males, t1.SETTLEMENT_ID
FROM PScData t1
INNER JOIN PscMemberData t2 ON t2._PARENT_AURI = t1.URI
WHERE t1.SETTLEMENT_ID in (SELECT DISTINCT SETTLEMENT_ID FROM PScData)
AND t2.SEX = '1'
GROUP BY t1.SETTLEMENT_ID
) tmp
评论
0赞
Shammas
12/4/2017
嗨,萨迪亚。感谢分享这个答案。一旦我的投票余额更新,我肯定会尽快对此投赞成票。
0赞
Bozhidar Stoyneff
12/8/2017
同样,子查询是无效的。实际上,在本例中,外部查询是无效的。只需执行子查询即可获得相同的结果。
1赞
Damini Suthar
12/4/2017
#4
尝试使用 ,
Select
Total_Males, SETTLEMENT_ID , URI, _PARENT_AURI
from
(Select
COUNT(t2.SEX) as Total_Males ,t1.SETTLEMENT_ID , t1.URI, t2._PARENT_AURI
from
PScData t1
INNER JOIN
PscMemberData t2 ON t2._PARENT_AURI = t1.URI
where
t1.SETTLEMENT_ID in (SELECT DISTINCT SETTLEMENT_ID FROM PScData)
AND t2.SEX = '1'
Group By
t1.SETTLEMENT_ID ) tmp
评论
select