2014-02-27 43 views
1

让我们说我有这个表如何从IIF语句的结果中选择组?

ID Item Number 
1 Pork 10 
2 Fish 15 
3 Carrot 5 
4 Tomato 5 

我想组通过该项目,并命名该组作为“类别”,然后选择每个类别数量的总和,是这样的:

SELECT Sum(Number) AS Total, 
FROM TABLE 
GROUP BY IIF(Item IN ('Pork', 'Fish'), 'Meat', 'Vegetable') 

但是,如何获取分配的类别名称?

+0

哪个RDBMS您使用的? –

+0

@MartinParkin,它是SQL Server – tete

回答

1

使用像

SELECT 
(CASE WHEN ITEM IN ('Pork', 'Fish') THEN 'Meat' ELSE 'Vegetable' END) TYPE, SUM(NUMBER) 
FROM TABLE 
GROUP BY (CASE WHEN ITEM IN ('Pork', 'Fish') THEN 'Meat' ELSE 'Vegetable' END) 
+0

以上代码导致错误: 'Msg 156,Level 15,State 1,Line 5 关键字'GROUP'附近的语法不正确。' –

+0

您的编辑解决了它,并且还回答问题+1 –

+0

感谢您的回复。我实际上知道外部SELECT的用法。但我只是想知道我是否只能使用一条SELECT语句来完成这个任务?例如,两个SELECT语句是否会影响给定大表的性能? – tete

1

您也可以使用WITH声明:

WITH T1 AS 
(
SELECT IIF(Item IN ('Pork', 'Fish'), 'Meat', 'Vegetable') as Grp, 
     T.* 
FROM T 
) 

SELECT Grp,SUM(Number) as Total 
FROM T1 
GROUP BY Grp 

SQLFiddle demo

+0

感谢您的回复。出于好奇,是否会影响性能,如果我使用WITH,或者如果我使用原始外部SELECT再次分组? – tete