什么是以下Access语句的SQL Server等价物

时间:2014-07-28 20:30:25

标签: sql sql-server ms-access

我已经为此扫描了堆栈溢出但没有成功。

我正在努力将一些访问视图,存储过程等转换为SQL Server 2008。 [我不太熟悉Access]

这是一个令我难过的陈述:

IIf([Column1]=0,[Column2],[Column1])

使用SELECT CASE语句,我可以得到适当转换的上述语句:

select case 
        when TABLE1.[COLUMN1]=0 then TABLE1.[COLUMN2]
    else TABLE1.[COLUMN1] 
    end as SomeColumn

...但这也出现在GROUP BY子句中。

这使得使用SELECT CASE变得困难,因为GROUP BY中没有子查询。

思想?

3 个答案:

答案 0 :(得分:3)

您可以使用子查询:

SELECT data.Somecolumn
FROM (
    select case 
    when TABLE1.[COLUMN1]=0 then TABLE1.[COLUMN2]
    else TABLE1.[COLUMN1] 
    end as SomeColumn
) data
GROUP BY data.SomeColumn

答案 1 :(得分:3)

您似乎认为select之前需要case。它不是。以下应该有效。

SELECT   CASE
            WHEN table1.column1 = 0 THEN table1.column2
            ELSE table1.column1
         END
            AS somecolumn
FROM     table1
GROUP BY CASE
            WHEN table1.column1 = 0 THEN table1.column2
            ELSE table1.column1
         END

答案 2 :(得分:2)

没有理由不能将CASE语句放入GROUP BY子句 -

select case when TABLE1.[COLUMN1] = 0
            then TABLE1.[COLUMN2]
            else TABLE1.[COLUMN1] end as SomeColumn,
       another_col,
       canother_col2,
       sum(a_dif_col) as sum_a_col
from TABLE1
group by case when TABLE1.[COLUMN1] = 0
              then TABLE1.[COLUMN2]
              else TABLE1.[COLUMN1] end,
       another_col,
       canother_col2

以上是完全有效的语法。