我使用以下查询返回组合在一起的行:
SELECT Work, COUNT(*) AS count, Amount, SUM(Amount) AS Total FROM work_times GROUP BY Work, Amount
我想对此进行调整,以便我可以列出每个分组的各个日期以下分组数据。
所以如果我有下表:
ID |工作|金额|日期
1 |治疗会议| £40 | 2013年2月2日
2 |咨询会议| 50英镑| 2013年2月1日
3 |治疗会议| 20英镑| 2013年2月3日
4 |咨询会议| 50英镑| 2013年2月8日
5 |咨询会议| 50英镑| 2013年2月15日
6 |治疗会议| £40 | 2013年2月9日
7 |咨询会议| 50英镑| 2013年2月22日
8 |治疗会议| £40 | 2013年2月16日
9 |治疗会议| 20英镑| 2013年2月10日
10 |咨询会议| 50英镑| 2013-03-01
查询将能够返回:
5个咨询会议@每个50英镑:250英镑
2013年2月1日
2013年2月8日
2013年2月15日
2013年2月22日
2013年3月1日
3次治疗会议@每次40英镑:120英镑
2013年2月2日
2013年2月9日
2013年2月16日
2次治疗会议@每次20英镑:40英镑
2013年2月3日
2013年2月10日
因为我在查询中将行分组在一起,所以我不知道如何引用各行。
答案 0 :(得分:1)
SELECT b.*, c.date2
FROM (
SELECT a.work,
COUNT(*) totalCount,
SUM(Amount) totalAmount
FROM tableName a
GROUP BY a.work, amount
) b
INNER JOIN
(
SELECT a.work, DATE_FORMAT(Date,'%D %M %Y') date2,
date
FROM tableName a
) c ON b.work = c.work
ORDER BY b.work, b.totalCount, c.date
答案 1 :(得分:1)
以下代码是我对 JW 的回答的轻微修改:
SELECT b.*, c.date2
FROM (
SELECT a.work, a.amount,
COUNT(*) totalCount,
SUM(Amount) totalAmount
FROM tableName a
GROUP BY a.work, a.amount
) b
INNER JOIN
(
SELECT a.work, a.amount, DATE_FORMAT(Date,'%D %M %Y') date2,
date
FROM tableName a
) c ON b.work = c.work and b.amount=c.amount
ORDER BY b.work, b.totalCount, c.date
我将金额添加到第一个子查询,第二个子查询和JOIN表达式。
答案 2 :(得分:0)
2个查询和一个UNION运算符应该提供您需要的格式。 SQL Fiddle
SELECT '' AS ID, Work, '' AS Date, Amount, SUM(Amount) AS Total
FROM TableName
GROUP BY Work, Amount
UNION ALL
SELECT ID, Work, Date, Amount, '' AS Total
FROM TableName
ORDER BY Work, Amount, Date;