Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 子查询返回了多个值。当子查询后跟=、!=、_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 子查询返回了多个值。当子查询后跟=、!=、

Sql 子查询返回了多个值。当子查询后跟=、!=、,sql,sql-server,tsql,Sql,Sql Server,Tsql,编辑:对不起,伙计们,我终于弄明白发生了什么事。我没有意识到一个变量不能有多个值。我再次修改了第6行,使其成为一个简单的选择函数。查询给出了我想要的4个数字,这是最终目标 下面的第一个查询统计4个数字。我想知道这4个数字是什么。我尝试删除第6行的COUNT函数,并将其保留为SELECT函数,但出现以下错误: 子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情 你知道如果我想让它打印出4个数字而不是计数,我需要做什么吗 原始代码: DECLARE @startD

编辑:对不起,伙计们,我终于弄明白发生了什么事。我没有意识到一个变量不能有多个值。我再次修改了第6行,使其成为一个简单的选择函数。查询给出了我想要的4个数字,这是最终目标

下面的第一个查询统计4个数字。我想知道这4个数字是什么。我尝试删除第6行的COUNT函数,并将其保留为SELECT函数,但出现以下错误:

子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情

你知道如果我想让它打印出4个数字而不是计数,我需要做什么吗

原始代码:

DECLARE @startDATE AS DATE = '2019-10-01'
DECLARE @endDATE AS DATE = '2020-09-30'
DECLARE @uicClass AS varchar(50) = '2D'
DECLARE @SNC AS bit = 0

DECLARE @WellViols int = (SELECT COUNT(distinct c.PKey)
    FROM Construct c
        INNER JOIN Well w ON c.WellKey = w.Pkey
        INNER JOIN Compliance cc ON c.PKey = cc.ConstructKey
        INNER JOIN ViolatiON v ON cc.PKey = v.ComplianceKey
        CROSS APPLY (SELECT le.IsIndianCountry
                        FROM well ww
                            INNER JOIN Construct cc ON ww.PKey = cc.WellKey
                            INNER JOIN Loc l ON c.PKey = l.ConstructKey
                            INNER JOIN LocExt le ON l.PKey = le.LocKey
                        WHERE cc.CompletiON = 0 AND cc.SideTrack = 0
                            AND l.LocType = 'surf'
                            AND ww.PKey = w.PKey) l
    WHERE ISNULL(l.IsIndianCountry, 0) = 0
        AND v.SNC = ISNULL(@SNC, 0)
        AND cc.DATEViolatiON BETWEEN @startDATE AND @endDATE
        AND c.ClASs = @uicClass)
修改代码行6

SELECT DISTINCT c.PKey

可以将结果作为逗号分隔的列表分配给字符串变量。 我不确定交叉应用部分中使用的查询返回了什么。如果您可以发布查询或示例数据和表脚本中得到的结果,那么获得答案就会容易得多

 DECLARE @startDATE AS DATE = '2019-10-01'
 DECLARE @endDATE AS DATE = '2020-09-30'
 DECLARE @uicClass AS varchar(50) = '2D'
 DECLARE @SNC AS bit = 0
 DECLARE @WellViols NVARCHAR(MAX) = N''

 SELECT COUNT(distinct c.PKey)
 into #Temp_Table
 FROM Construct c
    INNER JOIN Well w ON c.WellKey = w.Pkey
    INNER JOIN Compliance cc ON c.PKey = cc.ConstructKey
    INNER JOIN ViolatiON v ON cc.PKey = v.ComplianceKey 
    CROSS APPLY (SELECT le.IsIndianCountry
                    FROM well ww
                        INNER JOIN Construct cc ON ww.PKey = cc.WellKey
                        INNER JOIN Loc l ON c.PKey = l.ConstructKey
                        INNER JOIN LocExt le ON l.PKey = le.LocKey
                    WHERE cc.CompletiON = 0 AND cc.SideTrack = 0
                        AND l.LocType = 'surf'
                        AND ww.PKey = w.PKey) l
WHERE ISNULL(l.IsIndianCountry, 0) = 0
    AND v.SNC = ISNULL(@SNC, 0)
    AND cc.DATEViolatiON BETWEEN @startDATE AND @endDATE
    AND c.ClASs = @uicClass)


                 

  SET @WellViols =   STUFF((SELECT DISTINCT ', '+QUOTENAME(  CAST([T2].[PKey] AS 
                VARCHAR(100))) 
               FROM  #Temp_Table [T2]              
               FOR XML PATH('')), 1, 1, '')   

  SELECT @WellViols AS WellViols

   DROP TABLE #Temp_Table


               

我强烈推荐a.e.给我们一个尽可能小的示例,演示您试图实现的目标,并包括示例数据DDL+DML-以便我们可以运行它!和预期的结果,而不是一堵代码墙,其中大部分可能与问题无关。但是,除非它是一个表变量,否则可能无法为一个变量分配多个值。你真的想把它们打印出来吗?或者这只是一个调试练习?否则只需选择它们。我在那里看不到任何标量子查询。请把错误缩小到一个特定的查询。@DaleK我把它缩短了很多。我还删除了底部的打印函数,它们是为了我的测试目的而存在的。好吧,但是如果你最终没有打印这些值,你要用它们做什么?我给了您一些关于如何处理一组数据的提示…您可以添加一个varchar变量,并以逗号分隔的字符串形式获取值。