Sql server 使用SQL Server 2008统计数据
我使用的是SQL Server 2008,我有一个很大的数据库,我需要计算每个manzana的数据,但每一行都是0,所以我不知道怎么做Sql server 使用SQL Server 2008统计数据,sql-server,Sql Server,我使用的是SQL Server 2008,我有一个很大的数据库,我需要计算每个manzana的数据,但每一行都是0,所以我不知道怎么做 SELECT Manzana, SUM(CASE WHEN Manzana IN( 'CBrc','CBrc1', 'CBrc2') THEN 1 ELSE 0 END )AS CBrc, SUM(CASE WHEN Manzana IN ('W1','W11','W12','W13','W14','W15','W16'
SELECT
Manzana,
SUM(CASE WHEN Manzana IN( 'CBrc','CBrc1', 'CBrc2') THEN 1 ELSE 0 END )AS CBrc,
SUM(CASE WHEN Manzana IN ('W1','W11','W12','W13','W14','W15','W16') THEN 1 ELSE 0 END) AS W1,
SUM(CASE WHEN Manzana IN('PC1','PC11') THEN 1 ELSE 0 END) AS PC1,
SUM(CASE WHEN Manzana IN ('CLu','CLU1') THEN 1 ELSE 0 END) AS CLu,
SUM(CASE WHEN Manzana IN('S3','S31') THEN 1 ELSE 0 END) AS S3,
SUM(CASE WHEN Manzana IN ('C2L') THEN 1 ELSE 0 END) AS C2L,
SUM(CASE WHEN Manzana IN ('PCA') THEN 1 ELSE 0 END) AS PCA,
SUM(CASE WHEN Manzana IN ('ADO') THEN 1 ELSE 0 END) AS AD,
SUM(CASE WHEN Manzana IN ('PRC') THEN 1 ELSE 0 END) AS CBu,
SUM(CASE WHEN Manzana IN('SIN') THEN 1 ELSE 0 END) AS SIN_ACCESO_A_INFORMACION
FROM
dbo.Hoja3$
GROUP BY
Manzana
我需要得到这样的东西
Manzana CBrc W1 PC1 CLU S3 C2L
5445 8 11 0 0 0 0
4545 15 0 30 0 0 0
5455 21 0 5 3 2 0
7893 0 0 3 1 0 0
1566 100 4 1 0 0 80
在阅读了你的评论后,我试图计算我在每个Manzana看到的问题中有多少Cbrc、Pc1、Clu等 您未正确使用IN运算符 要测试子字符串的出现情况,请使用CHARINDEX函数:
SELECT
Manzana,
SUM( CASE WHEN CHARINDEX( 'SIN', Manzana ) > 0 THEN 1 ELSE 0 END ) AS SIN,
SUM( CASE WHEN CHARINDEX( 'PCA', Manzana ) > 0 THEN 1 ELSE 0 END ) AS PCA,
...
FROM
Hoja3$
GROUP BY
Manzana
你不能按Manzana分组,也不能按Manzana分组。另外,从样本数据中,我可以看出您没有提供足够的信息。就在第一排:
Manzana CBrc W1 PC1 CLU S3 C2L
5445 8 11 0 0 0 0
如果Manzana是5445,那么CBrc的值在哪一列?它不能是Manzana列,但必须是其他列。在这个信息真空中,我将称之为神秘专栏代码
然后尝试此方法。当然,您需要将所有代码组放入:
WITH CodeGroupings AS (
SELECT * FROM (VALUES -- Do this in a permanent table instead!
('CBrc%', 'CBrc'), -- can use wildcards
('W1_', 'W1'), -- or single letter wildcards
('PC1', 'PC1'), -- or just put individual values
('PC11', 'PC1'), -- mapping to the same group as the previous line
('SIN', 'SIN_ACCESO_A_INFORMACION')
) M (CodePattern, CodeGroup)
), ManzanaCodeGroups AS (
SELECT
H.Manzana,
CG.CodeGroup
FROM
dbo.Hoja3$ H
CROSS APPLY (
SELECT TOP 1 *
FROM CodeGroupings CG
WHERE H.Code LIKE CG.CodePattern
) CG
)
SELECT
*
FROM
ManzanaCodeGroups
PIVOT (Count(*) FOR (CodeGroup IN CBrc, W1, PC1, SIN_ACCESO_A_INFORMACION)) P
;
如果你想计算查询返回的数据,你需要计算。我要计算我在每个ManzanaI中使用你的代码时有多少Cbrc、Pc1、Clu等,但我收到一个错误消息156,级别15,状态1,第2行关键字“WHERE”附近语法不正确。必须有时间。我修正了它:每行0的结果与我相同