如何在Access 2010中使用TSQL“折叠”以下列数据?

时间:2014-04-21 19:19:08

标签: sql sql-server tsql ms-access distinct

在进行我的研究时,我无法找到类似的问题(在Access 2010和TSQL的上下文中)。

挑战:目前,我的数据看起来像下面的状态#1。在状态#1中,存在重复的行,唯一的区别是它们具有三个特定字段(OffersMembership,HasSeating,QuietArea)的不同字段/列值。

欲望:我想"崩溃"行,按PlaceID和Year,并且只生成每行中每个字段中存在的Y的数量的不同计数。我已经生成了样本数据来表示我想要的结果。

我的数据目前看起来如下:

State #1

Row | Year | PlaceID | OffersMembership | HasSeating | QuietArea

001   2011    Park           Y                 Y           Y                
002   2011    Park           Y                 N           N  
003   2011   Library         Y                 Y           Y 
004   2011   Library         N                 Y           N 
005   2011   Museum          Y                 N            
006   2011   Museum          Y                 Y           Y 
006   2011  MovieTheater     Y                             N
007   2012    Park           Y                 Y           Y                
008   2012    Park                                         N 

我希望我的数据看起来像:

State #2               

Row |  Year |  PlaceID | OffersMembership "Y"| HasSeating "Y"| QuietArea "Y" 

001    2011      Park             1                   1              1
002    2011     Library           1                   1              1
003    2011     Museum            1                   1              1
004    2011    Movietheater       1                  
004    2012      Park             1                   1              1

注意:

1)我在Access 2010中使用TSQL,因为我正在运行命中SQL Server表的传递查询。

2)是的,有"空白"状态#1中的数据中存在的单元格。

1 个答案:

答案 0 :(得分:0)

您可以使用简单的GROUP BY来折叠数据。我排除了Row列,因为我认为它只是一个行号占位符。

SELECT [Year]
      ,PlaceID
      ,COUNT(CASE OffersMembership WHEN 'Y' THEN 1 ELSE 0 END) AS OffersMembership
      ,COUNT(CASE HasSeating WHEN 'Y' THEN 1 ELSE 0 END) AS HasSeating
      ,COUNT(CASE QuietArea WHEN 'Y' THEN 1 ELSE 0 END) AS QuietArea
  FROM MyTable t
 GROUP BY t.[Year]
         ,PlaceID

注意:上述示例查询尚未执行。