简体   繁体   English

SQL Firebird查询给出错误的输出

[英]SQL Firebird Query giving incorrect output

I have the Following Firebird Query: 我有以下Firebird查询:

Select Distinct"Sorter", "Week" AS "WEEK", "Year", "Course" AS "Course"
FROM (
select
(extract(yearday from DATESENT) - extract(weekday from DATESENT-1)+7)/7 as "Sorter",
case extract(week from DATESENT)
when 1 then 'Week # 1 (2 Jan) '
when 2 then 'Week # 2 (09 Jan) '
when 3 then 'Week # 3 (16 Jan) '
when 4 then 'Week # 4 (23 Jan)'
when 5 then 'Week # 5 (30 Jan)'
when 6 then 'Week # 6 (06 Feb)'
when 7 then 'Week # 7 (13 Feb)'
when 8 then 'Week # 8 (20 Feb)'
when 9 then 'Week # 9 (27 Feb)'
when 10 then 'Week # 10 (06 March)'
when 11 then 'Week # 11 (13 March)'
when 12 then 'Week # 12 (20 March)'
when 13 then 'Week # 13 (27 March)'
when 14 then 'Week # 14 (03 April)'
when 15 then 'Week # 15 (10 April)'
when 16 then 'Week # 16 (17 April)'
when 17 then 'Week # 17 (24 April)'
when 18 then 'Week # 18 (01 May)'
when 19 then 'Week # 19 (08 May)'
when 20 then 'Week # 20 (15 May)'
when 21 then 'Week # 21 (22 May)'
when 22 then 'Week # 22 (29 May)'
when 23 then 'Week # 23 (05 Jun)'
when 24 then 'Week # 24 (12 Jun)'
when 25 then 'Week # 25 (19 Jun)'
when 26 then 'Week # 26 (26 Jun)'
when 27 then 'Week # 27 (03 July)'
when 28 then 'Week # 28 (10 July)'
when 29 then 'Week # 29 (17 July)'
when 30 then 'Week # 30 (24 July)'
when 31 then 'Week # 31 (31 July)'
when 32 then 'Week # 32 (07 Aug)'
when 33 then 'Week # 33 (14 Aug)'
when 34 then 'Week # 34 (21 Aug)'
when 35 then 'Week # 35 (28 Aug)'
when 36 then 'Week # 36 (04 Sep)'
when 37 then 'Week # 37 (11 Sep)'
when 38 then 'Week # 38 (18 Sep)'
when 39 then 'Week # 39 (25 Sep)'
when 40 then 'Week # 40 (02 Oct)'
when 41 then 'Week # 41 (09 Oct)'
when 42 then 'Week # 42 (16 Oct)'
when 43 then 'Week # 43 (23 Oct)'
when 44 then 'Week # 44 (30 Oct)'
when 45 then 'Week # 45 (06 Nov)'
when 46 then 'Week # 46 (13 Nov)'
when 47 then 'Week # 47 (20 Nov)'
when 48 then 'Week # 48 (27 Nov)'
when 49 then 'Week # 49 (04 Dec)'
when 50 then 'Week # 50 (11 Dec)'
when 51 then 'Week # 51 (18 Dec)'
when 52 then 'Week # 52 (25 Dec)'
end  as "Week" ,
extract(year from DATESENT) as "Year" ,
COURSE as "Course"


from programmers  
where
--** Change the Between date to select courses starting between those 2 dates format YYYY-MM-DD **--
DATESENT between '2012-12-20' and '2013-12-31'

Group by 1,2,3,4

UNION

select
(extract(yearday from BOOKING_DATE) - extract(weekday from  BOOKING_DATE-1)+7)/7 as "Sorter",
case extract(week from BOOKING_DATE)
when 1 then 'Week # 1 (2 Jan) '
when 2 then 'Week # 2 (09 Jan) '
when 3 then 'Week # 3 (16 Jan) '
when 4 then 'Week # 4 (23 Jan)'
when 5 then 'Week # 5 (30 Jan)'
when 6 then 'Week # 6 (06 Feb)'
when 7 then 'Week # 7 (13 Feb)'
when 8 then 'Week # 8 (20 Feb)'
when 9 then 'Week # 9 (27 Feb)'
when 10 then 'Week # 10 (06 March)'
when 11 then 'Week # 11 (13 March)'
when 12 then 'Week # 12 (20 March)'
when 13 then 'Week # 13 (27 March)'
when 14 then 'Week # 14 (03 April)'
when 15 then 'Week # 15 (10 April)'
when 16 then 'Week # 16 (17 April)'
when 17 then 'Week # 17 (24 April)'
when 18 then 'Week # 18 (01 May)'
when 19 then 'Week # 19 (08 May)'
when 20 then 'Week # 20 (15 May)'
when 21 then 'Week # 21 (22 May)'
when 22 then 'Week # 22 (29 May)'
when 23 then 'Week # 23 (05 Jun)'
when 24 then 'Week # 24 (12 Jun)'
when 25 then 'Week # 25 (19 Jun)'
when 26 then 'Week # 26 (26 Jun)'
when 27 then 'Week # 27 (03 July)'
when 28 then 'Week # 28 (10 July)'
when 29 then 'Week # 29 (17 July)'
when 30 then 'Week # 30 (24 July)'
when 31 then 'Week # 31 (31 July)'
when 32 then 'Week # 32 (07 Aug)'
when 33 then 'Week # 33 (14 Aug)'
when 34 then 'Week # 34 (21 Aug)'
when 35 then 'Week # 35 (28 Aug)'
when 36 then 'Week # 36 (04 Sep)'
when 37 then 'Week # 37 (11 Sep)'
when 38 then 'Week # 38 (18 Sep)'
when 39 then 'Week # 39 (25 Sep)'
when 40 then 'Week # 40 (02 Oct)'
when 41 then 'Week # 41 (09 Oct)'
when 42 then 'Week # 42 (16 Oct)'
when 43 then 'Week # 43 (23 Oct)'
when 44 then 'Week # 44 (30 Oct)'
when 45 then 'Week # 45 (06 Nov)'
when 46 then 'Week # 46 (13 Nov)'
when 47 then 'Week # 47 (20 Nov)'
when 48 then 'Week # 48 (27 Nov)'
when 49 then 'Week # 49 (04 Dec)'
when 50 then 'Week # 50 (11 Dec)'
when 51 then 'Week # 51 (18 Dec)'
when 52 then 'Week # 52 (25 Dec)'
end as "Week",
extract(year from BOOKING_DATE) as "Year" ,
'' as "Course"

from comp_Invoice
where
BOOKING_DATE between '2012-12-20' and '2013-12-31'

 )
GROUP BY 1,2,3,4
Order by 1,3 ASC

It returns the following: 它返回以下内容:

SORTER - WEEK - YEAR - COURSE
0      -Week1 - 2013 -  
1      -Week2 - 2013 - 
1      -Week2 - 2013 - WHS 
2      -Week3 - 2013 -  
3      -Week4 - 2013 -  
3      -Week4 - 2013 - WHS 
4      -Week5 - 2013 -  
4      -Week5 - 2013 - ALL 
5      -Week6 - 2013 -  
5      -Week6 - 2013 - REF

as we can seen I get 2 rows for Week2, Week4, Week5 and Week6 but I need the return to be as follows: 如我们所见,我在Week2,Week4,Week5和Week6上获得了2行,但我需要返回以下内容:

SORTER - WEEK - YEAR - COURSE
0      -Week1 - 2013 - 
1      -Week2 - 2013 - WHS
2      -Week3 - 2013 - 
3      -Week4 - 2013 - WHS
4      -Week5 - 2013 - ALL
5      -Week6 - 2013 - REF

Any suggestions? 有什么建议么?

Derek, Looks like you want the MAX value so why not try this; Derek,您似乎想要MAX值,所以为什么不尝试呢?

SELECT "Sorter", "WEEK", "Year", MAX("Course") FROM ( 
    "YOUR QUERY GOES HERE goes inside the 2 parenthesis"
) T1
GROUP BY 1,2,3

or if you can have multiple Courses on the same week use the LIST instead of MAX 或者如果您可以在同一周开设多个课程,请使用LIST而不是MAX

Hope this helps. 希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM