【发布时间】:2021-05-24 09:11:05
【问题描述】:
我有下表:
| ID_TableDetails | FK_TableMaster | StartDate | EndDate | StartTime | EndTime |
|---|---|---|---|---|---|
| 1 | 1 | 2021-05-24 | 2021-05-24 | 10:00 | 11:00 |
| 2 | 1 | 2021-05-25 | 2021-05-25 | 10:00 | 11:00 |
| 3 | 1 | 2021-05-26 | 2021-05-26 | 11:00 | 12:00 |
| 4 | 2 | 2021-05-27 | 2021-05-27 | 11:00 | 12:00 |
| 5 | 2 | 2021-05-28 | 2021-05-28 | 11:00 | 12:00 |
| 6 | 2 | 2021-05-29 | 2021-05-29 | 11:00 | 12:00 |
我想通过以下方式从上表中选择值
| 1stID | 2ndID | 3rdID | 1stStartDte | 1stStartTimeEndTime | 2ndStartDte | 2ndStartTimeEndTime | 3rdStartDte | 3rdStartTimeEndTime |
|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 2021-05-24 | 10:00 TO 11:00 | 2021-05-25 | 10:00 TO 11:00 | 2021-05-26 | 11:00 TO 12:00 |
| 4 | 5 | 6 | 2021-05-24 | 10:00 TO 11:00 | 2021-05-25 | 10:00 TO 11:00 | 2021-05-26 | 11:00 TO 12:00 |
FK_TableMaster 总是有三个条目,我想选择一行。
这是我尝试过的
SELECT
ID_TableDetils, Description, Startate, EndDate, StartTime, EndTime
FROM
TableDetils AS TD
JOIN
TableMaster AS TM ON TD.ID_TableDetils = TM.FK_TableMaster
这将为 FK_TableMaster 返回多行 - 我不知道如何将其作为单行选择,任何帮助将不胜感激。
更新基于:Group by column and multiple Rows into One Row multiple columns
WITH RNs AS
(
SELECT ID_TableDetails,
FK_TableMaster,
StartDate,
EndDate,
ROW_NUMBER() OVER (PARTITION BY ID_PtaEventScheduleDetails, FK_PtaEventSchedule ORDER BY (SELECT NULL)) AS RN --ORDER BY should be your ID/always ascending column
FROM dbo.TableDetails
WHERE Cancelled = 0 AND FK_TableMaster = 1
)
SELECT
ID_TableDetails,
FK_TableMaster,
MAX(CASE RN WHEN 1 THEN StartDate END) AS Result1,
MAX(CASE RN WHEN 2 THEN StartDate END) AS Result2,
MAX(CASE RN WHEN 3 THEN StartDate END) AS Result3,
MAX(CASE RN WHEN 1 THEN EndDate END) AS Result4,
MAX(CASE RN WHEN 1 THEN EndDate END) AS Result5,
MAX(CASE RN WHEN 1 THEN EndDate END) AS Result6
FROM
RNs R
GROUP BY
ID_TableDetails, FK_TableMaster
【问题讨论】:
-
@Larnu 不,这种方法不符合我的要求
-
为什么不呢?我建议这样做。您想以行号为中心;这就是你想要在这里做的。 Edit你的问题来解释为什么受骗候选人不回答问题。
-
@Larnu 在分组时仍然为 Fk 返回多行
-
您希望每个值
FK_TableMasternot 每个值 1 行每个FK_TableMaster和ID_TableDetails。ID_TableDetails不应出现在您的GROUP BY/PARTITION BY中。
标签: sql-server date datetime