我已经为此扫描了堆栈溢出但没有成功。
我正在努力将一些访问视图,存储过程等转换为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
中没有子查询。
思想?
答案 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
以上是完全有效的语法。