Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将1个字段、多个记录转换为1个记录多个字段_Sql_Ms Access_Self Join - Fatal编程技术网

SQL将1个字段、多个记录转换为1个记录多个字段

SQL将1个字段、多个记录转换为1个记录多个字段,sql,ms-access,self-join,Sql,Ms Access,Self Join,如果我更有经验,我可以用类似的“合并行”问题来解决这个问题,但我无法让它们工作。我在accdb中有大约2000个特定类别的“车库”(实际上是有患者数据的诊所,但在这里简化)。以下是一个车库数据存在方式的示例: Garage ID Car_Color Sub_Type? Color_Count 42 Blue Striped 5 42 Blue 10

如果我更有经验,我可以用类似的“合并行”问题来解决这个问题,但我无法让它们工作。我在accdb中有大约2000个特定类别的“车库”(实际上是有患者数据的诊所,但在这里简化)。以下是一个车库数据存在方式的示例:

Garage ID   Car_Color        Sub_Type?   Color_Count
    42       Blue            Striped        5
    42       Blue                           10
    42       Red                            23
    42       Yellow                         2
我需要将每个车库制作成一个单独的记录,每种颜色作为一个单独的字段,带有计数,所需的输出如下所示:

Garage ID   Blue Cars (total)  Blue Cars (striped)   Red Cars  Yellow Cars   Orange Cars
    42         15                    5                  23          2             0
有一个类别有一个子类型,这里显示为“蓝色汽车”和“蓝色汽车(条纹)”。对于这些,我需要将没有子类型的“蓝色”计数与其他“蓝色”计数相加,以获得总的“蓝色”计数。然后,我会将蓝色子类型列为一个单独的字段。大多数车库没有列出橙色的汽车,所以当没有橙色汽车的记录时,我需要让该字段的记录显示为0,但如果有橙色汽车的记录,则反映计数


这似乎与其他自联接非常相似,但我无法使计数方面正常工作,也无法使无记录的“0”正常工作。

您可以将聚合函数与表达式一起使用:

select [Garage ID],
  sum(IIF(Car_color='Blue', Color_Count, 0)) as BlueCarsTotal,
  sum(IIF(Car_color='Blue' AND [Sub_Type?]='Striped', Color_Count, 0)) as BlueCarsStripedTotal,
  sum(IIF(Car_color='Red', Color_Count, 0)) as RedCarsTotal,
  sum(IIF(Car_color='Yellow', Color_Count, 0)) as YellowCarsTotal,
  sum(IIF(Car_color='Orange', Color_Count, 0)) as OrangeCarsTotal
from yourtable
group by [Garage ID]
如果在另一个允许
CASE
表达式的数据库中执行此操作,则查询将是:

select [Garage ID],
  sum(case 
       when Car_color='Blue' 
       then Color_Count else 0 end) as BlueCarsTotal
  sum(case 
       when Car_color='Blue' AND [Sub_Type?]='Striped' 
       then Color_Count else 0 end) as BlueCarsStripedTotal,
  sum(case 
       when Car_color='Red' 
       then Color_Count else 0 end) as RedCarsTotal,
  sum(case 
       when Car_color='Yellow' 
       then Color_Count else 0 end) as YellowCarsTotal,
  sum(case 
       when Car_color='Orange' 
       then Color_Count else 0 end) as OrangeCarsTotal
from yourtable
group by [Garage ID]
交叉表可能适合:

TRANSFORM Sum(Garages.Color_Count) AS SumOfColor_Count
SELECT Garages.GarageID
FROM Garages
GROUP BY Garages.GarageID
PIVOT [Car_Color] & " " & [sub_type?];

看看交叉表查询。哇,我从来不知道这个函数。这为我打开了一个全新的世界。我已经看到了你的其他一些答案,蓝脚怪,我很荣幸你能回答我的问题。它完全符合我的需要。非常感谢你。你的SQL功夫真厉害,谢谢你,雷默。这是一个很好的解决方案。BlueFoots的解决方案给了我更多的通用性,将零打印出来有助于我在一些数据提交代码中更好地使用它。不过,你的回答对我来说很有教育意义,我很感激你的回答,因为将来我肯定会从中受益。