与计数记录的SQL相关的查询

与计数记录的SQL相关的查询,sql,asp.net-mvc,database,linq,lambda,Sql,Asp.net Mvc,Database,Linq,Lambda,我有一个反馈表,在其中我从客户那里得到反馈。他的桌子看起来像这样 ID Service Food Behavior Environment OverallExprience Flight Date 1 Excellent VeryGood Good Bad Poor EK0603 2018-03-29 2 Excellent Good VeryGood Excell

我有一个反馈表,在其中我从客户那里得到反馈。他的桌子看起来像这样

ID  Service      Food      Behavior  Environment   OverallExprience  Flight    Date

1   Excellent   VeryGood    Good     Bad            Poor             EK0603  2018-03-29 
2   Excellent   Good      VeryGood   Excellent      Poor             EK0603  2018-03-29 
              Excellent        Very Good    Good     Bad     poor
Service         2                 0           0       0        0

Food            0                 1           1       0        0

Behavior        0                 1           1       0        0

Environment     1                 0           0       1        0
我只想从员工那里搜索日期(from->to)并获得简要报告,其中包括

  • 优秀学生人数
  • 数量非常好
  • 货物数量
  • 坏的数量
  • 可怜的
对于所有给定的选项。 如果雇员选择的日期范围为2018-03-292018-03-29

所以他可以看到这样的记录

ID  Service      Food      Behavior  Environment   OverallExprience  Flight    Date

1   Excellent   VeryGood    Good     Bad            Poor             EK0603  2018-03-29 
2   Excellent   Good      VeryGood   Excellent      Poor             EK0603  2018-03-29 
              Excellent        Very Good    Good     Bad     poor
Service         2                 0           0       0        0

Food            0                 1           1       0        0

Behavior        0                 1           1       0        0

Environment     1                 0           0       1        0

困在这里需要帮助。如果答案是在LINQ query中,这将非常有用,因为您想将列转换为行,我想您需要一些联合。 对于每个“类别”,您可能需要一个不同的查询,对于每个类别,您应该计算每个选项的投票数

请尝试此查询,它应该执行以下操作:

SELECT MAX('Service') AS Category,
       COUNT(CASE WHEN t.Servive = 'Excellent' THEN 1 END) AS Excellent,
       COUNT(CASE WHEN t.Servive = 'VeryGood' THEN 1 END) AS Very_Good,
       COUNT(CASE WHEN t.Servive = 'Good' THEN 1 END) AS Good,
       COUNT(CASE WHEN t.Servive = 'Bad' THEN 1 END) AS Bad,
       COUNT(CASE WHEN t.Servive = 'Poor' THEN 1 END) AS Poor
  FROM table1 t
 WHERE t.Date BETWEEN '2018-03-29' AND '2018-03-29'
UNION
SELECT MAX('Food') AS Category,
       COUNT(CASE WHEN t.Food = 'Excellent' THEN 1 END) AS Excellent,
       COUNT(CASE WHEN t.Food = 'VeryGood' THEN 1 END) AS Very_Good,
       COUNT(CASE WHEN t.Food = 'Good' THEN 1 END) AS Good,
       COUNT(CASE WHEN t.Food = 'Bad' THEN 1 END) AS Bad,
       COUNT(CASE WHEN t.Food = 'Poor' THEN 1 END) AS Poor
  FROM table1 t
 WHERE t.Date BETWEEN '2018-03-29' AND '2018-03-29'
UNION
SELECT MAX('Behavior') AS Category,
       COUNT(CASE WHEN t.Behavior = 'Excellent' THEN 1 END) AS Excellent,
       COUNT(CASE WHEN t.Behavior = 'VeryGood' THEN 1 END) AS Very_Good,
       COUNT(CASE WHEN t.Behavior = 'Good' THEN 1 END) AS Good,
       COUNT(CASE WHEN t.Behavior = 'Bad' THEN 1 END) AS Bad,
       COUNT(CASE WHEN t.Behavior = 'Poor' THEN 1 END) AS Poor
  FROM table1 t
 WHERE t.Date BETWEEN '2018-03-29' AND '2018-03-29'
UNION
SELECT MAX('Environment') AS Category,
       COUNT(CASE WHEN t.Environment = 'Excellent' THEN 1 END) AS Excellent,
       COUNT(CASE WHEN t.Environment = 'VeryGood' THEN 1 END) AS Very_Good,
       COUNT(CASE WHEN t.Environment = 'Good' THEN 1 END) AS Good,
       COUNT(CASE WHEN t.Environment = 'Bad' THEN 1 END) AS Bad,
       COUNT(CASE WHEN t.Environment = 'Poor' THEN 1 END) AS Poor
  FROM table1 t
 WHERE t.Date BETWEEN '2018-03-29' AND '2018-03-29'

所以你只是想让人们为你编写解决方案?不是真的,只是想得到查询的提示你到目前为止尝试了什么?从简单开始,然后展开。从“反馈”组中选择“计数(*),方法是使用过多的经验,这样做,但不能在一次中获得所需的输出query@FaizanNaeem看起来不像LINQ?也许我的朋友能帮你?谢谢。通过执行此命令获得所需的输出