【问题标题】:select a new column with group by clause使用 group by 子句选择一个新列
【发布时间】:2016-04-01 05:51:57
【问题描述】:

我想选择另一个带有 group by 子句和 sum 或 count 函数的列。

SELECT t1.[09to12PM], t2.[12to15PM], t3.[15to17PM], t4.[17to23PM]
FROM
  (SELECT COUNT (Premark) AS [09to12PM]
   FROM saree_order_stages
   WHERE Premark LIKE '%ready to go%' AND Premark != 'not ready to go'
     AND pdate>='2016-03-29 09:00:00' AND Pdate <='2016-03-29 12:00:00') t1,

  (SELECT COUNT (Premark) AS [12to15PM]
   FROM saree_order_stages
   WHERE Premark LIKE '%ready to go%' AND Premark != 'not ready to go'
     AND pdate>='2016-03-29 12:00:00' AND Pdate <='2016-03-29 15:00:00') t2,

  (SELECT COUNT (Premark) AS [15to17PM]
   FROM saree_order_stages
   WHERE Premark LIKE '%ready to go%' AND Premark != 'not ready to go'
     AND pdate>='2016-03-29 15:00:00' AND Pdate <='2016-03-29 17:00:00') t3,

  (SELECT COUNT (Premark) AS [17to23PM]
   FROM saree_order_stages
   WHERE Premark LIKE '%ready to go%' AND Premark != 'not ready to go'
     AND pdate>='2016-03-29 17:00:00' AND Pdate <='2016-03-29 23:00:00') t4
GROUP BY t1.[09to12PM], t2.[12to15PM], t3.[15to17PM], t4.[17to23PM]

结果显示这个

09to12PM  12to15PM 15to17PM 17to23PM
23         21        15        19

我们希望像这样添加一个列名。 并显示数据如下。

name 09to12PM  12to15PM 15to17PM 17to23PM
amit   23         21        15        19 
sumit  11         22        11        45
raj    14         4         5         67

【问题讨论】:

  • name 会从哪里来?
  • 是表格字段的一部分,根据表格显示应位于第一列

标签: sql sql-server group-by


【解决方案1】:

您可以使用条件聚合来简化查询:

SELECT
    name,
    [09to12PM] = SUM(CASE WHEN pdate>='2016-03-29 09:00:00' AND Pdate <='2016-03-29 12:00:00' THEN 1 ELSE 0 END),
    [12to15PM] = SUM(CASE WHEN pdate>='2016-03-29 12:00:00' AND Pdate <='2016-03-29 15:00:00' THEN 1 ELSE 0 END),
    [15to17PM] = SUM(CASE WHEN pdate>='2016-03-29 15:00:00' AND Pdate <='2016-03-29 17:00:00' THEN 1 ELSE 0 END),
    [17to23PM] = SUM(CASE WHEN pdate>='2016-03-29 17:00:00' AND Pdate <='2016-03-29 23:00:00' THEN 1 ELSE 0 END)
FROM saree_order_stages
WHERE
    Premark LIKE '%ready to go%'
    AND Premark != 'not ready to go'
    AND CAST(pdate AS DATE) = '2016-03-29'
GROUP BY name

【讨论】:

  • 很高兴能帮上忙!如果您觉得我的回答对您有用,请随时接受。 :-)
猜你喜欢
  • 2019-11-11
  • 2020-01-01
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多