【发布时间】:2012-09-27 10:07:03
【问题描述】:
我正在编写一个将在 .NET 应用程序中使用的查询,因此我希望 SQL Server 2008 为我完成大部分处理,而不是运行应用程序的客户端 PC。
我正在尝试从我加入的一些表中获取数据。
这是一个例子:
SELECT SUBSTRING(CAST(CAST(HCPD.SeferCikisZamani AS TIME) AS VARCHAR), 1, 5) AS Kalkis, SUBSTRING(CAST(CAST(HCPD.DonusZamani AS TIME) AS VARCHAR), 1, 5) AS Donus, V.AracPlaka
FROM HAT_CALISMA_PLANI HCP WITH(NOLOCK)
INNER JOIN HAT_CALISMA_PLANI_DETAY HCPD WITH(NOLOCK) ON HCPD.HatCalismaPlaniKey = HCP.HatCalismaPlaniKey
INNER JOIN VALIDATOR V WITH(NOLOCK) ON V.ValidatorKey = HCPD.ValidatorKey
WHERE HCP.HatKey = 2 AND CAST(HCPD.SeferCikisZamani AS DATE) = '2012-09-25'
ORDER BY Kalkis
这个查询返回这个结果:
Kalkis Donus AracPlaka
-------------------------
01:51 02:01 07 ABY 04
02:02 02:12 07 AB 978
02:21 02:31 07 ABY 04
02:32 02:42 07 AB 978
03:01 03:11 07 ABY 04
03:02 03:12 07 AB 978
03:31 03:41 07 ABY 04
03:42 03:52 07 AB 978
04:01 04:11 07 ABY 04
但是,在我的报告中,它们应该是这样的,
07 ABY 04 07 AB 978
Kalkis 06:15 06:30
Donus 07:45 08:00
Kalkis 08:00 08:10
Donus 09:30 09:40
Kalkis 10:00 10:15
Donus 11:30 11:45
Kalkis 12:30 12:45
Donus 14:00 14:15
顺便说一句,这些就像公共汽车时刻表。 有谁知道实现这一目标的好方法?
【问题讨论】:
-
使用数据透视函数得到你的结果。使用此链接msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
-
透视表中的时间与原始表中的时间有什么关系?比如第一行
Kalkis 06:15 06:3006:15和06:3是从哪里来的??
标签: sql sql-server pivot