【问题标题】:Query Related to SQL for count records [closed]与 SQL 相关的计数记录查询 [关闭]
【发布时间】:2018-03-30 18:40:35
【问题描述】:

我有一个反馈表,我从客户那里得到反馈。他的桌子是这样的

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 

我想从员工那里得到的只是搜索日期(从 ---> 到)并得到一份简短的报告,其中包括

  • 优秀人数
  • 数量非常好
  • 好数量
  • 坏数
  • 可怜的

对于所有给定的选项。 如果员工选择了 2018-03-29 到 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 查询中,那将是显而易见的

【问题讨论】:

  • 所以您只是希望人们为您编写解决方案?
  • 不是真的,只是想得到查询的提示
  • 到目前为止你尝试过什么?从简单开始,然后在此基础上进行扩展。
  • 从 OverAllExperience 的反馈组中选择 count(*) 这样做但没有在一个查询中获得所需的输出
  • @FaizanNaeem 这看起来不像 LINQ?也许我的SQL to LINQ recipe 会帮助你?

标签: sql asp.net-mvc database linq lambda


【解决方案1】:

因为您想将列转置为行,所以我想您需要几个 UNION。 您可能需要对每个“类别”进行不同的查询,并且对于每个类别,您应该计算每个选项获得多少票。

请试试这个查询,它应该可以做到:

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'

【讨论】:

  • 谢谢 (Y) 。通过执行这个得到想要的输出
猜你喜欢
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多