Sql server 使用SQL Server 2008统计数据

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'

我使用的是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') 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的结果与我相同