我尝试使用PHP脚本填充HTML表格,该脚本运行SQL查询,返回以下结果(示例):
UserID | Name | Month | Value |
1 | Joe | Jan | 123.00 |
1 | Joe | Feb | 22.00 |
1 | Joe | March | 32.50 |
21 | Derek | Jan | 45.76 |
21 | Derek | March | 12.31 |
但是当我想在PHP中填充表格时,我希望表格看起来像这样:
Name | January | February | March |
Joe | 123.00 | 22.00 | 32.50 |
Derek | 45.76 | | 12.31 |
但是当使用PHP while循环生成表时,它会执行以下操作,这是我期望的,因为它只是循环遍历每个获取的行:
Name | January | February | March |
Joe | 123.00 | | |
Joe | 22.00 | | |
Joe | 32.500 | | |
Derek | 45.76 | | | ... etc`
正如我所说,我希望它能以这种方式运行,但无论如何都要在第二个例子中显示它。
我已经制定了一些逻辑来将值放在正确的位置,但它仍然在一个单独的行上,所以目前它看起来像这样,这不是理想的
Name | January | February | March |
Joe | 123.00 | | |
Joe | | 22.00 | |
Joe | | | 32.50 |
Derek | 45.76 | | |
我希望我不会错过任何明显的内容,但我已经看过SQL中的几个解决方案,但似乎无法让它发挥作用。
任何帮助都将不胜感激。
编辑:
道歉,我的SQL查询从两个不同的表中获取数据,因为我正在比较值,所以我的理解是我无法使用GROUP BY语句。这是我的SQL查询:
SELECT dbo_tstUser.UserID, dbo_tstUser.Name, dbo_tstUser.Month, dbo_tstUser.Value, dbo_tstUserImport.Value FROM dbo_tstUser INNER JOIN dbo_tstUserImport ON dbo_tstUser.UserID = dbo_tstUserImport.UserID;
答案 0 :(得分:0)
您需要在SQL中添加GROUP BY name语句: -
SELECT UserID, Name, Month, Value
FROM table
GROUP BY Name
编辑: -
SELECT dbo_tstUser.UserID, dbo_tstUser.Name, dbo_tstUser.Month, dbo_tstUser.Value, dbo_tstUserImport.Value
FROM dbo_tstUser
INNER JOIN dbo_tstUserImport ON dbo_tstUser.UserID = dbo_tstUserImport.UserID
GROUP BY dbo_tstUser.UserID;
答案 1 :(得分:0)
您可以使用聚合来进行旋转:
select UserId, name,
max(case when Month = 'Jan' then value end) as January,
max(case when Month = 'Feb' then value end) as February,
max(case when Month = 'March' then value end) as March
from your_table
group by UserId, name;
如果您不想在结果中使用UserId,可以使用:
select name,
max(case when Month = 'Jan' then value end) as January,
max(case when Month = 'Feb' then value end) as February,
max(case when Month = 'March' then value end) as March
from your_table
group by UserId, name;
请注意,我将UserId保留在group by子句中,以便将具有相同名称的不同人员分开。