【问题标题】:Used Joined tables in select statment在 select 语句中使用了连接表
【发布时间】:2011-08-04 20:07:23
【问题描述】:

我想知道在选择语句中声明列时是否可以在 CASE 语句中使用绑定连接表。我在下面的 sn-p 中包含了我的问题的简化示例。有什么想法吗?谢谢!

SELECT  M.MID 
    ,[Count] =  CASE (SELECT COUNT(*) FROM Refund R2 
            WHERE R2.RefundID = R.RefundID) = 1
                        THEN 'One'
                        ELSE 'Many'
                        END

FROM #temp T
JOIN Refund R ON R.RefundID = T.RefundID

"WHERE R2.RefundID = R.RefundID 表示"R.RefundID 不能绑定。

【问题讨论】:

  • 如果你去掉 CASE 这个词你有一个有效的查询...
  • 您似乎需要一个 CASE WHEN(至少对于 SQL Server)
  • 别名R2 应该指代什么?我在您的查询中的其他任何地方都没有看到它。

标签: sql join case


【解决方案1】:

如果您使用的是 SQL Server 2005 或更高版本,您可以尝试不同的方法:

SELECT
  M.MID, 
  [Count] = CASE COUNT(*) OVER (PARTITION BY R.RefundID)
    WHEN 1 THEN 'One'
    ELSE 'Many'
  END
FROM #temp T
JOIN Refund R ON R.RefundID = T.RefundID

【讨论】:

    【解决方案2】:

    你的别名不好。你有一个R,但没有一个R2,它被引用了:

    SELECT  M.MID 
            ,[Count] =  CASE WHEN (SELECT COUNT(*) FROM ReferralTypeKey R2
                                   WHERE R2.RefundID = R.RefundID) = 1
                                   THEN 'One'
                                   ELSE 'Many'
                                   END
    
    FROM #temp T
    JOIN Refund R ON R.RefundID = T.RefundID
    

    【讨论】:

    • 你是对的复制错误我在网站上修复了它,但它仍然不起作用
    • @Jbone - 我还更正了不正确的 CASE 语法。
    • @Jbone - 你能澄清“不起作用”吗?是同样的错误信息吗?错误指示的行号是多少?
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多