【问题标题】:SQL SELECT CompressionSQL SELECT 压缩
【发布时间】:2017-11-14 06:36:42
【问题描述】:

我正在编写具有以下结构的查询:

IF (SELECT 8) = (SELECT 9)
INSERT INTO Quality_Report VALUES ('USBL', 'IM SL Current Time Period',(SELECT 8),(SELECT 9),'Match',GETDATE())

ELSE INSERT INTO Quality_Report VALUES ('USBL', 'IM SL Current Time Period',(SELECT 8),(SELECT 9),'Not Matched',GETDATE())

SELECT "8" 和 "9" 将被替换为返回数值的 SELECT 语句(如下所示)。

SELECT 
CASE when Sum(AVG_DLY_SLS_LST_35_DYS) =0 then 0 else 
Sum(INVN_DOL) / Sum(AVG_DLY_SLS_LST_35_DYS)end as [IM DSO Current Time Period]
FROM [Mars_Bars_RAW].DBO.[LND_ITEMDETAILS] 
LEFT JOIN [Mars_Bars_RAW].DBO.[LND_OpcoMaster]      ON OpCo_NBR = Opco
       WHERE FISC_WEEK = '37'
       AND FY17_Market = 'Southeast'

当我用实际查询替换我的两个 SELECT 语句时,我得到了这个错误:Msg 116, Level 16, State 1, Line 43 当子查询不使用 EXISTS 引入时,选择列表中只能指定一个表达式。

有什么理由我不能这样做?与虚拟 SELECT 8/9s 一起工作正常。

谢谢,

【问题讨论】:

  • 微软 SQL (T-SQL)

标签: sql sql-server tsql if-statement select


【解决方案1】:

您只向我们展示了一个选择语句,而另一个给您一个错误的语句。 试试这个,你会发现它不会产生错误:

    if (SELECT 
    CASE when Sum(AVG_DLY_SLS_LST_35_DYS) =0 then 0 else 
    Sum(INVN_DOL) / Sum(AVG_DLY_SLS_LST_35_DYS)end as [IM DSO Current Time Period]
    FROM [Mars_Bars_RAW].DBO.[LND_ITEMDETAILS] 
    LEFT JOIN [Mars_Bars_RAW].DBO.[LND_OpcoMaster]      ON OpCo_NBR = Opco
           WHERE FISC_WEEK = '37'
           AND FY17_Market = 'Southeast')
           =
     (SELECT 
    CASE when Sum(AVG_DLY_SLS_LST_35_DYS) =0 then 0 else 
    Sum(INVN_DOL) / Sum(AVG_DLY_SLS_LST_35_DYS)end as [IM DSO Current Time Period]
    FROM [Mars_Bars_RAW].DBO.[LND_ITEMDETAILS] 
    LEFT JOIN [Mars_Bars_RAW].DBO.[LND_OpcoMaster]      ON OpCo_NBR = Opco
           WHERE FISC_WEEK = '37'
           AND FY17_Market = 'Southeast')
    print 'this works'

在您的另一个选择语句中您有多个字段(在我的示例中为 8,9),这会导致错误:

    if (SELECT 
        8, 9)
               =
         (SELECT 
        CASE when Sum(AVG_DLY_SLS_LST_35_DYS) =0 then 0 else 
        Sum(INVN_DOL) / Sum(AVG_DLY_SLS_LST_35_DYS)end as [IM DSO Current Time Period]
        FROM [Mars_Bars_RAW].DBO.[LND_ITEMDETAILS] 
        LEFT JOIN [Mars_Bars_RAW].DBO.[LND_OpcoMaster]      ON OpCo_NBR = Opco
               WHERE FISC_WEEK = '37'
               AND FY17_Market = 'Southeast')
        print 'this works'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多