2014-03-03 69 views
0

我想检索以下示例中的数据。以下SQL将返回两条记录。SQL子查询错误

SELECT -1 AS NUM 
FROM TABLE 
WHERE COMP_CODE = 'TEST' 
    AND (DETL_REMK = 'Rest Day' 
     OR SHFT_CODE = 'WK_PH') 
    AND RSRV_DATE_1 IS NOT NULL 
    AND RSRV_DATE_1 BETWEEN @TR_FR AND @TR_TO 
    AND EMPE_ID = 'TEST' 
GROUP BY EMPE_ID, 
     RSRV_DATE_1 

我想显示下面。

ORG UNIT   EMPE_ID  FAM_NAME  TMS_TYPE  Qty 
----------------------------------------------------------------- 
''     ''    ''   Used   -1 
''     ''    ''   Used   -1 

所以,我正在努力做这样的SQL语句。但是我得到了错误 “子查询返回的值超过1,当子查询跟随=,!=,<,< =,>,> =或子查询用作表达式时,这是不允许的。

如何构建正确的SQL。请帮帮我。提前致谢。

SELECT '' ORG_UNIT, '' EMPE_ID, '' FAM_NAME, 'Used' AS TMS_TYPE, 
     ISNULL(CAST(
        (SELECT -1 AS NUM 
        FROM TABLE 
        WHERE COMP_CODE = 'TEST' 
        AND (DETL_REMK = 'Rest Day' 
          OR SHFT_CODE = 'WK_PH') 
        AND RSRV_DATE_1 IS NOT NULL 
        AND RSRV_DATE_1 BETWEEN @TR_FR AND @TR_TO 
        AND EMPE_ID = 'TEST' 
        GROUP BY EMPE_ID, RSRV_DATE_1)AS NVARCHAR(MAX)),0) QTY 

回答

1

你可以试试这个,而不是

SELECT '' ORG_UNIT, '' EMPE_ID, '' FAM_NAME, 'Used' AS TMS_TYPE, -1 as QTY 
union all 
SELECT '' ORG_UNIT, '' EMPE_ID, '' FAM_NAME, 'Used' AS TMS_TYPE, -1 as QTY 
4

如果你只是硬编码子查询外的值,你并不需要一个子查询返回的2行,只是这样做:

SELECT '' ORG_UNIT, '' EMPE_ID, '' FAM_NAME, 'Used' AS TMS_TYPE, -1 AS QTY 
FROM TABLE 
WHERE COMP_CODE = 'TEST' 
    AND (DETL_REMK = 'Rest Day' 
     OR SHFT_CODE = 'WK_PH') 
    AND RSRV_DATE_1 IS NOT NULL 
    AND RSRV_DATE_1 BETWEEN @TR_FR AND @TR_TO 
    AND EMPE_ID = 'TEST' 
GROUP BY EMPE_ID, 
     RSRV_DATE_1 

这里的问题是你没有引用表中的任何列,只是使用它来产生大量的行。请分享完整的问题和代码,因为我确信这里面还有更多你想问的问题。

+0

明白了。非常感谢。 –

0

您将需要前1添加到您的子查询,从你所得到的错误,看起来像子查询返回超过1行:

SELECT Top 1 -1 AS NUM 
FROM TABLE 
WHERE COMP_CODE = 'TEST' 
AND (DETL_REMK = 'Rest Day', 
OR SHFT_CODE = 'WK_PH') 
AND RSRV_DATE_1 IS NOT NULL 
AND RSRV_DATE_1 BETWEEN @TR_FR AND @TR_TO 
AND EMPE_ID = 'TEST' 
GROUP BY EMPE_ID, RSRV_DATE_1