Sql server 数一数';X';然后在SQL中将值排列为行

Sql server 数一数';X';然后在SQL中将值排列为行,sql-server,Sql Server,我在SQL中有一个表,它有许多列,每行中每列的值都是“”或“X”。我需要为每一列计算这个“X”,这可以通过下面的代码来完成 SELECT COUNT(GVI0) AS GVI0, COUNT(GVI1) AS GVI1, COUNT(GVI2) AS GVI2 FROM dbo.HullInspectionProgram WHERE (StructureEntry='1' AND Year='2016') 查询结果为 GVI0 NDT0 GVI1 NDT1 GVI2 NDT2 11 11

我在SQL中有一个表,它有许多列,每行中每列的值都是“”或“X”。我需要为每一列计算这个“X”,这可以通过下面的代码来完成

SELECT COUNT(GVI0) AS GVI0, COUNT(GVI1) AS GVI1, COUNT(GVI2) AS GVI2
FROM dbo.HullInspectionProgram
WHERE (StructureEntry='1' AND Year='2016')
查询结果为

GVI0 NDT0 GVI1 NDT1 GVI2 NDT2
11   11   2    4    11   11
但是,(据我所知)为了将此计数值绑定到具有多个系列名称“GVI”和“NDT”的ASP.net图表控件中,我需要将列设置为DataTable的行

我尝试像这样在SQL中使用UNPIVOT

SELECT GVI0Count
FROM (
      SELECT COUNT(GVI0) AS GVI0, COUNT(GVI1) AS GVI1, COUNT(GVI2) AS GVI2
      FROM dbo.HullInspectionProgram
      WHERE (StructureEntry='1' AND Year='2016')
     )
UNPIVOT (GVI0Count FOR ListOfColumns IN (GVI0)) AS unpivott
但代码似乎是错的


我如何做到这一点?

我认为以下内容可能适合您。至少,作为一个开始

SELECT *
FROM (
      SELECT COUNT(GVI0) AS GVI0, COUNT(GVI1) AS GVI1, COUNT(GVI2) AS GVI2
      FROM dbo.HullInspectionProgram
      WHERE (StructureEntry='1' AND Year='2016')
     ) P
UNPIVOT (GVI0Count FOR ListOfColumns IN (GVI0, GVI1, GVI2)) AS unpivott

为什么我需要在UNPIVOT之前加上“P”或“AS P”?这是因为我创建了一个新表,但实际上没有将其保存到数据库中?我认为它确实使用该别名创建了一个临时工作表,是的。这就是为什么我的sql查询出现错误。。。我想创建一个临时表需要一个名称才能使用它。。。