2010-02-11 51 views
2

我有一个表,一个简单的表,只有3个字段。需要一个创新的Sql查询::帮助

ID Type Date

数据(记录表示的300 3)的实施例

154 |页面| 2010-02-08

154 |链接| 2010-02-08

154 |表格| 2010-02-08

编号:只是为客户端ID

类型:只能是已填充( '形', '网页', '链接')

3件事

日期:创建日期

每个ID有多个条目。

我想创建,让我以下输出所需输出的

实施例的存储过程或查询/计数

ID |链接|表格|页

154 | 75 | 40 | 100

我只想每个类型的计数,所以我不必做3个独立的SQL调用来获得每个类型的计数。任何帮助将不胜感激,这将需要去一个存储过程,并且我想要基于此的所有ID是ID。

在此先感谢

回答

4

你可能想是这样的

Select id 
, Sum(Case when Type='Link' then 1 else 0 end) as Links 
, Sum(Case when Type='Forms' then 1 else 0 end) as Forms 
, Sum(Case when Type='Page' then 1 else 0 end) as Pages 
From SomeTable 
Group by ID 
+0

完美!谢谢你,先生! – sia 2010-02-12 15:36:35

+0

很高兴我能帮到你。 – cmsjr 2010-02-12 15:38:53

1

试试这个(SQL Server)的

SELECT 
    [ID] 
     ,SUM(CASE TYPE WHEN 'LINK' THEN 1 ELSE 0 END) AS [Link] 
     ,SUM(CASE TYPE WHEN 'FORMS' THEN 1 ELSE 0 END) AS [FORMS] 
     ,SUM(CASE TYPE WHEN 'PAGE' THEN 1 ELSE 0 END) AS [Page] 
    FROM yourTable 
    GROUP BY ID  --remove this line if you are passing in a single @GivenID 
    WHERE [email protected] --remove this line if you want counts for all IDs (returns many rows) 
2

一个简单的PIVOT查询应该解决的问题

SELECT * 
FROM SimpleTable 
PIVOT 
(
    COUNT(Date) 
    FOR Type IN ([Link], [Form], [Page]) 
) AS t 
+0

+1只需添加一个ID过滤器即可选择每个ID所需的结果,而且非常完美 – 2010-02-11 20:54:21