【问题标题】:SQL Pivot MIN( COUNT (SQL 枢轴 MIN( COUNT (
【发布时间】:2009-09-24 20:20:00
【问题描述】:

我有一个复杂的 MS SQL 2005 查询,其中包含 PIVOT...

我有这样的数据:

Data ( clients left join visits ):
ClientID VisitID ServiceID
1        34      5
1        36      2
1        36      5
1        45      2
1        48      2
1        60      2
2        44      1
3        48      2
3        78      3
3        79      2

而我需要的是这个:

ID [1] [2] [3] [4] [5]
1   0  1   0   0   1
2   1  0   0   0   0
3   0  1   1   0   0

我使用的 SQL 查询是这样的:

select * from 
         (select clients.ClientID, clients.serviceID FROM clients left join visits on visit.cliendid=clients.clientid ) e 
         pivot ( COUNT(serviceID) for serviceID in ([1],[2],...,[54]) ) p

但是这个 SQL 查询并没有做我想要的,而是这样做:

ID [1] [2] [3] [4] [5]
1   0  4   0   0   2
2   1  0   0   0   0
3   0  2   1   0   0

我需要列中的所有数据为 0 或 1,例如,0 从未使用过此服务,1 已使用过此服务... 我该怎么做?

如果我能做支点(Math.MIN(COUNT(serviceID), 0) for ... 或者如果我能做(CASE (COUNT(serviceID) > 0) THEN 1 ELSE 0 for ..),那就太棒了。 . 但它不会让我。

【问题讨论】:

    标签: sql-server pivot aggregators


    【解决方案1】:
    SELECT  *
    FROM    (
            SELECT  DISTINCT clients.ClientID, clients.serviceID
            FROM    clients
            ) e 
    PIVOT   (
            COUNT(serviceID)
            FOR serviceID in ([1],[2])
            ) p
    

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2020-07-22
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多