【问题标题】:SQL server 2008 - subquery returned more than one valueSQL Server 2008 - 子查询返回多个值
【发布时间】:2014-12-30 18:35:19
【问题描述】:

SQL server 2008 - 从查询结果集中读取数据时出错。子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

This came up as soon I added the case statement with CHDOCS. Everything else worked
 fine until that point. Can anyone help me out with this one please?


SELECT
CHDOCS.MAILING_ID
,CASE WHEN (SELECT CHDOCS.MAILING_DOCUMENT
       FROM CHDOCS 
       WHERE
               CHDOCS.MAILING_DOCUMENT LIKE N'%EX%')IS NOT NULL

               THEN (SELECT CHDOCS.MAILING_DOCUMENT
       FROM CHDOCS 
       WHERE
               CHDOCS.MAILING_DOCUMENT LIKE N'%EX%') ELSE '' END AS 'DOC'

     FROM CHDOCS

【问题讨论】:

  • 显然不止一行的文档与该模式匹配。 SQL 应该返回哪一个?
  • 如果可能的话,我想全部退回。还有其他写法吗?
  • 问题是什么?
  • 如果有多行 CHDOCS.MAILING_DOCUMENT.. 我只想要另一行 CHDOCS.MAILING_ID
  • 那么为什么不只是SELECT Mailing_ID, Mailing_Document FROM dbo.CHDOCS WHERE Mailing_Document LIKE N'%EX%';?或SELECT Mailing_ID, Mailing_Document = CASE WHEN Mailing_Document LIKE N'%EX%' THEN Mailing_Document ELSE N'DOC' END FROM dbo.CHDOCS;

标签: sql sql-server-2008


【解决方案1】:

您不能对结果集使用 CASE 语句 - 它必须针对单个值运行。

我相信这就是您想要完成的,这是对 CHDOCS 表中每个 MAILING_DOCUMENT 字段的评估:

SELECT CHDOCS.MAILING_ID

    -- Check if the Mailing Document field matches the pattern *EX*
    ,CASE WHEN CHDOCS.MAILING_DOCUMENT LIKE N'%EX%' 
        THEN CHDOCS.MAILING_DOCUMENT  -- It does, return the field value.
        ELSE ''                       -- It doesn't, return empty.
        END AS DOC

FROM CHDOCS

【讨论】:

  • 这行得通!谢谢!我刚开始学习sql。感谢帮助
【解决方案2】:

你的这个查询

SELECT
    CHDOCS.MAILING_ID, ISNULL(CHDOCS.MAILING_DOCUMENT,'')
    FROM CHDOCS
WHERE CHDOCS.MAILING_DOCUMENT LIKE N'%EX%'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2013-08-29
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多