(Order Table)
ID  Order_Type  Order_Name  
70  1       1   

(Details Table)
ID  Day    Start_Time   End_Time
70  Monday     17:05:00 18:05:00
70  Tuesday    17:10:00 18:10:00
70  Wednesday  17:15:00 18:15:00
70  Thursday   17:20:00 18:20:00
70  Friday     17:25:00 18:25:00
70  Saturday   17:30:00 18:30:00




 ID  Order_Type Monday_Start_Time  Monday_End_Time  Tuesday_Start_Time  Tuesday_End_Time   
    70  1          17:05:00           18:05:00          17:10:00            18:10:00

我必须显示直到上周日开始时间结束时间之前的上述数据。我应该如何查询

#1楼 票数:3 已采纳

您可以为此使用UNPIVOTPIVOT

select *
from
(
  select id, order_type, order_name,
    day + '_' + col as col,
    val
  from 
  (
    select o.id,
      o.order_type,
      o.order_name,
      d.day,
      d.start_time,
      d.end_time
    from orders o
    inner join details d
      on o.id = d.id
  ) x
  unpivot
  (
    val
    for col in (start_time, end_time)
  ) u
) x1
pivot
(
  min(val)
  for col in ([Monday_start_time], [Monday_end_time], 
              [Tuesday_start_time], [Tuesday_end_time],
              [Wednesday_start_time], [Wednesday_end_time],
              [Thursday_start_time], [Thursday_end_time],
              [Friday_start_time], [Friday_end_time],
              [Saturday_start_time], [Saturday_end_time])
) p

参见带有演示的SQL Fiddle

如果您不想使用UNPIVOTPIVOT或者正在使用不具有这些功能的版本,那么您将需要执行多个联接:

select o.id,
   o.order_type,
   o.order_name,
   mon.start_time Monday_Start_time,
   mon.end_time Monday_End_time,
   tues.start_time Tuesday_Start_time,
   tues.end_time Tuesday_End_time,
   wed.start_time Wednesday_Start_time,
   wed.end_time Wednesday_End_time,
   thur.start_time Thursday_Start_time,
   thur.end_time Thursday_End_time,
   fri.start_time Friday_Start_time,
   fri.end_time Friday_End_time,
   sat.start_time Saturday_Start_time,
   sat.end_time Saturday_End_time
from orders o
left join details mon
  on o.id = mon.id
  and mon.day = 'Monday'
left join details tues
  on o.id = tues.id
  and tues.day = 'tuesday'
left join details wed
  on o.id = wed.id
  and wed.day = 'wednesday'
left join details thur
  on o.id = thur.id
  and thur.day = 'thursday'
left join details fri
  on o.id = fri.id
  and fri.day = 'friday'
left join details sat
  on o.id = sat.id
  and sat.day = 'saturday'

参见带有演示的SQL Fiddle

  ask by lax translate from so

未解决问题?本站智能推荐:

4回复

从两个表中获取数据

我正在sql server 2008上工作。我想做这样的事情。 我有两个这样的桌子。 Table1 Table2 Output
3回复

涉及两个表的SQL查询

我有两个表, tbl_msg ... tbl_user 我想从tbl_msg中选择toid = 42的所有msg,以及从其发送msg的人的姓名(而不是fromid)。 结果应如下所示。 查询: 但这只会给我对应的fromid的名称,而不会给我toid和fromi
2回复

如何使用连接查询从两个以上的表中获取数据,而无需外键和主键

一旦我需要你的帮助, 我的数据库中有三个表。 1> 婚礼 2> selectSite 3> webSite 我想要以下输出: ws是webSite表s别名, s是siteSelect表的别名。 来自webSite表的所​​有数据
2回复

合并来自两个SQL查询的数据

我正在将我的应用程序从Django移植到ASP.NET Webforms(违背我的意愿,但是我们可以对企业界做些什么..),并且我习惯于Django生成所有SQL查询,因此现在我需要帮助。 我有3个表: proceso , marcador , marcador_progreso 每个p
3回复

比较SQL查询中的两个日期

我有一个表roomtype ,其中包含以下数据: 对于给定的日期(即2013-11-09 ),我想返回匹配季节的rate ,其中给定的日期在StartSeason和EndSeason日期之内。 即,如果我的日期是2013-11-09 ,那么比率应该是1700。如果我的日期是2012
2回复

SQL查询在“循环”中具有两个多对多关系的数据库

首先,对羊毛主题名称表示歉意,很难用语言表达这一名称。 因此,我谨记此意为您附上了一个数据库关系图(见下文),希望该图可以更简洁地进行解释。 我们继承了一个大型数据库(因此无法更改/合理化它,更可惜了!),其中包含一个麻烦的“循环”(4个表,其中包含多个不同的许多关系)。 我
1回复

合并两个 SQL 查询的结果

我有两个表中的数据,我需要在一个查询中获取所有数据并加入获取数据。
2回复

我应该如何编写查询以显示来自两个表的数据

我想从两个表中获取数据: 从第一个表中检索所有代理名称,并从第二个表中检索销售总额。 如果没有任何用户出售,则必须给我零或零值。 输出类似于图像中所示。