我在 TableData 中有 3 列,即 CDate、Drivername、Trips。現在我正在創建一份月度報告,以顯示司機的行程串列。此外,我想顯示在本月特定日期沒有作業的司機資料(顯示 trips=0)。
我已經嘗試過“加入”方法,coalesce但都是徒勞的......如果有人可以幫助我解決這個問題,我將不勝感激。
我在這里看到了很多示例查詢,它們產生一列結果,將值設定為零或獲取單列的聚合。



我實際上需要整整一個月;但為了更容易參考,我使用了截至 2022 年 5 月 8 日的日期。請注意,串列中大約有 45 個驅動程式。
以下是我的一些解決方法:
select CDATE,DriverName from(
select CDate=convert(date,CDate) from TableCal where month(CDate)=5 AND year(CDate)=2022
)AllDays left join
(select TDate,Drivername,Trips=count(*) from TableData where month(TDate)=5 and year(TDate)=2022 group by drivername,TDate
)tm on CDate=TDate group by Cdate,DriverName
ORDER BY Drivername,Cdate

示例 DDL 和 DML 如下:
CREATE TABLE [dbo].[tableData](
[CDate] [date] NULL,
[DriverName] [nvarchar](20) NULL,
[Trips] [int] NULL
) ON [PRIMARY]
INSERT INTO tableData(CDate,DriverName,Trips) VALUES('2022-05-01','Michael',5)
INSERT INTO tableData(CDate,DriverName,Trips) VALUES('2022-05-03','Michael',7)
INSERT INTO tableData(CDate,DriverName,Trips) VALUES('2022-05-04','Michael',8)
INSERT INTO tableData(CDate,DriverName,Trips) VALUES('2022-05-05','Michael',13)
INSERT INTO tableData(CDate,DriverName,Trips) VALUES('2022-05-01','Sam',5)
INSERT INTO tableData(CDate,DriverName,Trips) VALUES('2022-05-04','Sam',5)
INSERT INTO tableData(CDate,DriverName,Trips) VALUES('2022-05-05','Sam',13)
INSERT INTO tableData(CDate,DriverName,Trips) VALUES('2022-05-06','Sam',9)
CREATE TABLE [dbo].[TableCal](
[CDate] [date] NULL
) ON [PRIMARY]
INSERT INTO TableCal(CDate) VALUES('2022-05-01')
INSERT INTO TableCal(CDate) VALUES('2022-05-02')
INSERT INTO TableCal(CDate) VALUES('2022-05-03')
INSERT INTO TableCal(CDate) VALUES('2022-05-04')
INSERT INTO TableCal(CDate) VALUES('2022-05-05')
INSERT INTO TableCal(CDate) VALUES('2022-05-06')
INSERT INTO TableCal(CDate) VALUES('2022-05-07')
INSERT INTO TableCal(CDate) VALUES('2022-05-08')
uj5u.com熱心網友回復:
使用 CTE,您不需要日歷表,您仍然可以使用它,例如,如果您有要排除的日期
但是您應該知道 Sql SERVER 2012 已于去年 7 月(2022 年)結束生命,請參閱https://learn.microsoft.com/en-us/lifecycle/products/microsoft-sql-server-2012
所以你應該考慮遷移
with cte as (
select
DriverName,
DATEADD(MONTH, DATEDIFF(MONTH, 0, min(CDate)), 0) dt
, DATEADD(MONTH, DATEDIFF(MONTH, -1, min(CDate)), -1) maxDt
from tableData
WHERE month(CDate)=5 AND year(CDate)=2022
group by DriverName
union all
select
DriverName,
dateadd(DAY, 1, dt),
maxDt
from cte
where dt < maxDt
)
select c.DriverName, FORMAT (c.dt, 'yyyy-MM-dd'), coalesce(t.Trips, 0) avalue
from cte c
left join tableData t
on t.DriverName = c.DriverName
and t.CDate = c.dt
order by c.DriverName, c.dt
| 司機姓名 | (無列名) | 一個值 |
|---|---|---|
| 邁克爾 | 2022-05-01 | 5 |
| 邁克爾 | 2022-05-02 | 0 |
| 邁克爾 | 2022-05-03 | 7 |
| 邁克爾 | 2022-05-04 | 8 |
| 邁克爾 | 2022-05-05 | 13 |
| 邁克爾 | 2022-05-06 | 0 |
| 邁克爾 | 2022-05-07 | 0 |
| 邁克爾 | 2022-05-08 | 0 |
| 邁克爾 | 2022-05-09 | 0 |
| 邁克爾 | 2022-05-10 | 0 |
| 邁克爾 | 2022-05-11 | 0 |
| 邁克爾 | 2022-05-12 | 0 |
| 邁克爾 | 2022-05-13 | 0 |
| 邁克爾 | 2022-05-14 | 0 |
| 邁克爾 | 2022-05-15 | 0 |
| 邁克爾 | 2022-05-16 | 0 |
| 邁克爾 | 2022-05-17 | 0 |
| 邁克爾 | 2022-05-18 | 0 |
| 邁克爾 | 2022-05-19 | 0 |
| 邁克爾 | 2022-05-20 | 0 |
| 邁克爾 | 2022-05-21 | 0 |
| 邁克爾 | 2022-05-22 | 0 |
| 邁克爾 | 2022-05-23 | 0 |
| 邁克爾 | 2022-05-24 | 0 |
| 邁克爾 | 2022-05-25 | 0 |
| 邁克爾 | 2022-05-26 | 0 |
| 邁克爾 | 2022-05-27 | 0 |
| 邁克爾 | 2022-05-28 | 0 |
| 邁克爾 | 2022-05-29 | 0 |
| 邁克爾 | 2022-05-30 | 0 |
| 邁克爾 | 2022-05-31 | 0 |
| 山姆 | 2022-05-01 | 5 |
| 山姆 | 2022-05-02 | 0 |
| 山姆 | 2022-05-03 | 0 |
| 山姆 | 2022-05-04 | 5 |
| 山姆 | 2022-05-05 | 13 |
| 山姆 | 2022-05-06 | 9 |
| 山姆 | 2022-05-07 | 0 |
| 山姆 | 2022-05-08 | 0 |
| 山姆 | 2022-05-09 | 0 |
| 山姆 | 2022-05-10 | 0 |
| 山姆 | 2022-05-11 | 0 |
| 山姆 | 2022-05-12 | 0 |
| 山姆 | 2022-05-13 | 0 |
| 山姆 | 2022-05-14 | 0 |
| 山姆 | 2022-05-15 | 0 |
| 山姆 | 2022-05-16 | 0 |
| 山姆 | 2022-05-17 | 0 |
| 山姆 | 2022-05-18 | 0 |
| 山姆 | 2022-05-19 | 0 |
| 山姆 | 2022-05-20 | 0 |
| 山姆 | 2022-05-21 | 0 |
| 山姆 | 2022-05-22 | 0 |
| 山姆 | 2022-05-23 | 0 |
| 山姆 | 2022-05-24 | 0 |
| 山姆 | 2022-05-25 | 0 |
| 山姆 | 2022-05-26 | 0 |
| 山姆 | 2022-05-27 | 0 |
| 山姆 | 2022-05-28 | 0 |
| 山姆 | 2022-05-29 | 0 |
| 山姆 | 2022-05-30 | 0 |
| 山姆 | 2022-05-31 | 0 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/510762.html
