Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
行到列SQL查询_Sql_Sql Server_Pivot - Fatal编程技术网

行到列SQL查询

行到列SQL查询,sql,sql-server,pivot,Sql,Sql Server,Pivot,我正在编写一个将在.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),

我正在编写一个将在.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
顺便说一句,这些都像公共汽车时刻表。
有人知道实现这一点的好方法吗?

在查询数据之前查看数据会更容易,但如果要使用现有查询,可以执行以下操作:

select *
from
(
  select AracPlaka, val, col,
     row_number() over(partition by AracPlaka order by VAL, col) rn
  from
  (
    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
  ) x
  unpivot
  (
    val
    for col in(Kalkis, Donus)
  ) u
) x1
pivot
(
  max(val)
  for AracPlaka In([07 ABY 04], [07 AB 978])
) p
由于您正在尝试对两列进行透视,最简单的方法是首先对
Kalkis
Donus
列进行透视,然后对数据应用
PIVOT


以下是一个(不包括原始查询)

在查询数据之前查看数据会更容易,但如果要使用现有查询,可以执行以下操作:

select *
from
(
  select AracPlaka, val, col,
     row_number() over(partition by AracPlaka order by VAL, col) rn
  from
  (
    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
  ) x
  unpivot
  (
    val
    for col in(Kalkis, Donus)
  ) u
) x1
pivot
(
  max(val)
  for AracPlaka In([07 ABY 04], [07 AB 978])
) p
由于您正在尝试对两列进行透视,最简单的方法是首先对
Kalkis
Donus
列进行透视,然后对数据应用
PIVOT


这是一个(不包括您的原始查询)

感谢您的精彩回答。但它只返回一个Donus和一个Kalkis。它应该像多纳斯,卡尔基斯,多纳斯,卡尔基斯,多纳斯,卡尔基斯col 07 ABY 04 07 AB 978 Donus 04:11 03:52 Kalkis 04:01 03:42@MehmetBudak您能从每个表创建一个工作数据模型吗?然后我可以查看查询并尝试使其工作。@MehmetBudak请查看我的编辑,并让我知道它现在是否工作。你是我的好朋友!你太聪明了!谢谢你抽出时间!最后一个问题@bluefeet,如何动态填充此部分<代码>阿拉普拉卡在([07 ABY 04],[07 AB 978])中的最大值。此信息位于此表验证程序(AracPlaka)中。感谢您的精彩回答。但它只返回一个Donus和一个Kalkis。它应该像多纳斯,卡尔基斯,多纳斯,卡尔基斯,多纳斯,卡尔基斯col 07 ABY 04 07 AB 978 Donus 04:11 03:52 Kalkis 04:01 03:42@MehmetBudak您能从每个表创建一个工作数据模型吗?然后我可以查看查询并尝试使其工作。@MehmetBudak请查看我的编辑,并让我知道它现在是否工作。你是我的好朋友!你太聪明了!谢谢你抽出时间!最后一个问题@bluefeet,如何动态填充此部分<代码>阿拉普拉卡在([07 ABY 04],[07 AB 978])中的最大值。这个信息在这个表验证器(AracPlaka)中使用pivot函数并得到结果。使用此链接数据透视表中的时间与原始数据透视表中的时间之间有什么关系?例如,在第一行
Kalkis 06:15 06:30
中,
06:15
06:3
来自哪里?使用pivot函数并获取结果。使用此链接数据透视表中的时间与原始数据透视表中的时间之间有什么关系?例如,在第一行
Kalkis 06:15 06:30
06:15
06:3
来自哪里??