我有一个表truck_data
,列truck_no, diesel_filled, source, destination, amount
等
我想仅提取truck_no
和diesel_filled
,以便在整个月内显示每辆卡车中diesel_filled
的详细信息。
请告诉我SQL查询 - 我曾尝试过此查询,但它无法正常工作
SELECT
truck_no, diesel_filled, date
FROM
truck-data
ORDER BY
date
请帮帮我
提前致谢
我想要这样的输出
truck_no 1 2 3 4 5 6 7 8 9 etc(date from 1 to 31))
---------------------------------------------------------------------------
xyz 25 22 33 33 22 22 22 0 0 (diesel filled in truck order by date)
pqr 25 25 22 11 22 00 22 55 22
abc 21 15 12 14 13 00 22 00 00
答案 0 :(得分:1)
您可以使用PIVOT operator获得这些结果,但开始日期和结束日期必须在同一个月内:
DECLARE
@StartDate DATE = '20141001',
@EndDate DATE = '20141031';
SELECT pvt.truck_no,
ISNULL(pvt.[1], 0) AS Day1,
ISNULL(pvt.[2], 0) AS Day2,
ISNULL(pvt.[3], 0) AS Day3,
ISNULL(pvt.[4], 0) AS Day4,
ISNULL(pvt.[5], 0) AS Day5,
ISNULL(pvt.[6], 0) AS Day6,
ISNULL(pvt.[7], 0) AS Day7,
ISNULL(pvt.[8], 0) AS Day8,
/*...*/
ISNULL(pvt.[31], 0) AS Day31
FROM (
SELECT t.truck_no, t.diesel_filled, DAY(t.[date]) AS day_filled
FROM (VALUES
('t#1', 100, '20140915'),('t#1', 110, '20141001'),('t#1', 120, '20141001'),('t#1', 105, '20141002'),
('t#2', 10, '20141001'),('t#2', 20, '20141001'),('t#2', 55, '20141003'),
('t#3', 20, '20141004'),('t#3', 20, '20141002'),('t#3', 75, '20141008')
) t(truck_no, diesel_filled, [date])
WHERE t.[date] BETWEEN @StartDate AND @EndDate
) x
PIVOT( SUM(x.diesel_filled) FOR x.day_filled IN ([1],[2],[3],[4],[5],[6],[7],[8],/*...*/[31]) ) pvt
答案 1 :(得分:0)
目前还不清楚你想要什么。但我认为你正在混合演示和数据
SELECT truck_no,diesel_filled,date
FROM truck-data
ORDER BY date
将按日期排序所有行。据推测,你只需要过滤一些特定的月份。
SELECT truck_no,diesel_filled,date
FROM truck-data
WHERE date >= 2014-10-05 AND date < 2014-11-01 ORDER BY date
获取今年10月份的所有行。如果此处的日期是DateTime列。
然后您可以将其更改为:
SELECT truck_no,sum(diesel_filled),Day(date)
FROM truck-data
WHERE date >= 2014-10-05 AND date < 2014-11-01
GROUP BY truck_no
ORDER BY date"
这样每天只能给你一排卡车。如果disel_filled是某种数值。
然后在您的用户界面中,您必须以您喜欢的任何方式进行演示。例如,在某种类型的数据透视表中,如上面的描述。 当然,您也可以在SQL中执行此操作,但通常这是表示层的工作。 如果你真的想在SQL中做,你可以调查:http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx 如果你使用MsSql。