选择子查询中的NULLS

时间:2018-05-04 09:19:10

标签: sql tsql subquery sql-subselect nested-select

我有两张桌子。一个显示工作模式名称,一个显示每天工作的小时数,每列中有模式ID。我希望它链接,以便每天的小时数出现在一行上。对于每个模式,最多有28个,因此任何具有较少天数的模式应该返回null。 我使用了以下内容:

SELECT  DISTINCT    tn.pat_nm                                                       AS 'Pattern Name',
                    tn.pat_id                                                       AS 'Pattern ID',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=1)   AS 'Day 1',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=2)   AS 'Day 2',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=3)   AS 'Day 3',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=4)   AS 'Day 4',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=5)   AS 'Day 5',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=6)   AS 'Day 6',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=7)   AS 'Day 7',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=8)   AS 'Day 8',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=9)   AS 'Day 9',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=10)  AS 'Day 10',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=11)  AS 'Day 11',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=12)  AS 'Day 12',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=13)  AS 'Day 13',
                    (select format(td.pat_day_hrs,'HH:mm') where td.pat_day_no=14)  AS 'Day 14'

FROM                trentadm.tpat_nm tn
                    JOIN trentadm.tpat_det td
                        ON td.pat_id=tn.pat_id


ORDER BY            tn.pat_nm

我得到以下结果

enter image description here

有没有办法让每个模式ID在一行上获得所有时间?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

尝试使用PIVOT

SELECT *
FROM
  (
    SELECT tn.pat_nm,tn.pat_id,td.pat_day_no,format(td.pat_day_hrs,'HH:mm') d
    FROM trentadm.tpat_nm tn
    JOIN trentadm.tpat_det td ON td.pat_id=tn.pat_id
  ) q PIVOT(MAX(d) FOR pat_day_no IN([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14])) p

然后你可以替换标签

SELECT
  pat_nm 'Pattern Name',
  pat_id 'Pattern ID',
  [1] 'Day 1',
  [2] 'Day 2',
  [3] 'Day 3',
  [4] 'Day 4',
  [5] 'Day 5',
  [6] 'Day 6',
  [7] 'Day 7',
  [8] 'Day 8',
  [9] 'Day 9',
  [10] 'Day 10',
  [11] 'Day 11',
  [12] 'Day 12',
  [13] 'Day 13',
  [14] 'Day 14'
FROM
  (
    SELECT tn.pat_nm,tn.pat_id,td.pat_day_no,format(td.pat_day_hrs,'HH:mm') d
    FROM trentadm.tpat_nm tn
    JOIN trentadm.tpat_det td ON td.pat_id=tn.pat_id
  ) q PIVOT(MAX(d) FOR pat_day_no IN([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14])) p

答案 1 :(得分:0)

试试这样:

extension String {
  mutating func insert(string:String,ind:Int) {
    self.insert(contentsOf: string, at:self.index(self.startIndex, offsetBy: ind) )
  }
}