Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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 Server中的子查询的WHERE子句中分配变量_Sql_Sql Server - Fatal编程技术网

如何在SQL Server中的子查询的WHERE子句中分配变量

如何在SQL Server中的子查询的WHERE子句中分配变量,sql,sql-server,Sql,Sql Server,这就是我写的问题。在WHERE子句中,我给出了确切的值--“111020020001”-我想与t1中的每个结算ID进行比较。我该怎么做?请提供一些解决方案 此外,查询将返回两行计数,即:当前针对两个不同ID的计数。如何添加两个不同id的结果以获得子查询返回的这两行的总和?您的意思是要与表PScData中的每个结算id进行比较 根据我对这个问题的理解,您可以对PScData表进行自连接,或者使用下面的查询 此查询将结算id与同一表中的所有结算id进行比较。我不明白你为什么要这样做 请检查脚本,如果

这就是我写的问题。在
WHERE
子句中,我给出了确切的值--“111020020001”-我想与
t1
中的每个
结算ID
进行比较。我该怎么做?请提供一些解决方案


此外,查询将返回两行计数,即:当前针对两个不同ID的计数。如何添加两个不同id的结果以获得子查询返回的这两行的总和?

您的意思是要与表PScData中的每个结算id进行比较

根据我对这个问题的理解,您可以对PScData表进行自连接,或者使用下面的查询

此查询将结算id与同一表中的所有结算id进行比较。我不明白你为什么要这样做

请检查脚本,如果我理解错了,请告诉我

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

您的意思是要与表PScData?中的每个结算id进行比较吗

根据我对这个问题的理解,您可以对PScData表进行自连接,或者使用下面的查询

此查询将结算id与同一表中的所有结算id进行比较。我不明白你为什么要这样做

请检查脚本,如果我理解错了,请告诉我

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

子查询在此无效。如果您不需要所有结算,只需执行连接并过滤掉结算。但你的问题并不清楚你是想过滤掉它们还是仅仅匹配它们。为了匹配,请使用联接

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
如果需要将其过滤掉,则需要准备通缉结算清单,并在
WHERE
子句中使用
IN
。您可以使用a展开想要的结算列表,并将其传递到
WHERE
子句中:

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

至于第二个问题-如何将两个不同ID的结果相加以得到这两行的总和您需要使用
groupby
子句。据我所知,您实际上不需要将其分组为
结算ID
,因此只需将其从
分组中删除即可。请记住,您也需要将其从
选择
列表中删除。

此处的子查询无效。如果您不需要所有结算,只需执行连接并过滤掉结算。但你的问题并不清楚你是想过滤掉它们还是仅仅匹配它们。为了匹配,请使用联接

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
如果需要将其过滤掉,则需要准备通缉结算清单,并在
WHERE
子句中使用
IN
。您可以使用a展开想要的结算列表,并将其传递到
WHERE
子句中:

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

至于第二个问题-如何将两个不同ID的结果相加以得到这两行的总和您需要使用
groupby
子句。据我所知,您实际上不需要将其分组为
结算ID
,因此只需将其从
分组中删除即可。请记住,您也需要将其从
选择
列表中删除。

我找到了查询的解决方案。结果可以检索并汇总如下:

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

我找到了查询的解决方案,结果可以检索并汇总如下:

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
试着

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
试着

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


您使用的是MySQL还是MS SQL Server?我使用的是SQL Server这是完整的查询吗?因为我认为外部
select
语句是不必要的。where子句会将列中的每个值与要筛选的数据进行比较。您使用的是MySQL还是MS SQL Server?我使用的是SQL Server?这是完整的查询吗?因为我认为外部
select
语句是不必要的。where子句将把列中的每个值与要筛选的数据进行比较。是,您的答案是正确的。在where子句“t1.consolution\u ID=consolution\u ID和t2.SEX='1'”中也可以这样做。我刚刚找到。请帮助我完成第二部分,即:如何对通过count检索到的值求和。感谢Sadia的评论。如果脚本对您有所帮助,您可能会接受这个答案。再次感谢您的Upvote。请告诉我您希望获得总和的字段。在查询中,COUNT(t2.Sex)给出了多个值,因为有不同的ID。我想将COUNT(t2.Sex)结果值添加到1个答案中。您正在按结算\u ID分组,这就是它显示基于结算ID的计数的原因。如果您从选择列表中删除结算ID并按分组,您将收到总计数。是,您的答案是正确的。在where子句“t1.consolution\u ID=consolution\u ID和t2.SEX='1'”中也可以这样做。我刚刚找到。请帮助我完成第二部分,即:如何对通过count检索到的值求和。感谢Sadia的评论。如果脚本对您有所帮助,您可能会接受这个答案。再次感谢您的Upvote。请告诉我您希望获得总和的字段。在查询中,COUNT(t2.Sex)给出了多个值,因为有不同的ID。我想将COUNT(t2.Sex)结果值添加到1个答案中。您正在按结算\u ID分组,这就是它显示基于结算ID的计数的原因。如果您从选择列表和分组方式中删除结算ID,您将收到总计数。您好,Sadia。谢谢分享这个答案。一旦我的投票余额被更新,我肯定会尽快更新投票。再次,子查询是无效的。实际上,在这种情况下,外部查询是无效的。只要执行子查询,就会得到相同的结果。谢谢分享这个答案。一旦我的投票余额被更新,我肯定会尽快更新投票。再次,子查询是无效的。实际上,在这种情况下,外部查询是无效的。通过只执行子查询,您将得到相同的结果。