SQL Server查询语法(子查询,括号和CASE WHEN)

时间:2015-11-26 12:33:07

标签: sql sql-server subquery inner-join case-when

我遇到了一个问题,我试图在下面运行。我覆盖并关闭了所有括号,但SQL Server仍然突出显示

  

')附近的语法错误。

AS REV

的最后一个括号中
SELECT 
    spot.spotid, rev.revenue 
FROM 
    [Media].[dbo].[T_MED_Spot] AS SPOT
INNER JOIN
    (SELECT 
         CASE 
            WHEN spot2.status = '4'
                THEN spotcc.mediacost * 5
            WHEN spot2.status IN ('7','8')
                THEN spotcc.mediacost * 20
         END AS revenue
     FROM
         (SELECT * 
          FROM [Media].[dbo].[T_MED_Spot] AS SPOT2
          INNER JOIN [Media].[dbo].[T_MED_SpotCalculation] AS SPOTCC ON spot2.spotid = spotcc.spotid)
    ) AS REV ON spot.spotid = rev.spotid

我在这里有点不知所措。我希望显而易见的是我试图实现整体,即内部使用spotid将T_MED_Spot表与名为REV的子查询连接起来。

由于

3 个答案:

答案 0 :(得分:2)

SELECT s.spotid, 
    CASE 
        WHEN s.[status] = '4' THEN c.mediacost * 5
        WHEN s.[status] IN ('7','8') THEN c.mediacost * 20
    END AS revenue
FROM [dbo].[T_MED_Spot] s
JOIN [dbo].[T_MED_SpotCalculation] c ON c.spotid = s.spotid

检查此查询...

答案 1 :(得分:1)

这是否有效:

SELECT spot.spotid, rev.revenue 
FROM [Media].[dbo].[T_MED_Spot] AS SPOT
INNER JOIN
(SELECT 
        CASE 
            WHEN T.status = '4'
                THEN T.mediacost*5
            WHEN T.status IN ('7','8')
                THEN T.mediacost*20
            END AS revenue, spotid
    FROM (SELECT * FROM [Media].[dbo].[T_MED_Spot] AS SPOT2
            INNER JOIN [Media].[dbo].[T_MED_SpotCalculation] AS SPOTCC 
ON spot2.spotid = spotcc.spotid) AS T ) AS REV
ON spot.spotid = rev.spotid

您没有为内部查询设置别名

答案 2 :(得分:0)

您命名了第一个INNER JOIN子查询AS REV,但第二个子查询没有别名。