Wpis z mikrobloga

Mirki, pomoże ktoś w #mssql #sql?

Mam tabelę:
|id|datastart|datakoniec|
|1|2020-01-24|2020-03-03|
|2|2020-03-12|2020-04-15|

a potrzebuje osiągnać:
|rok | miesiac | liczba start |liczba koniec | liczba start - koniec|
|2020 | 01 | 1 | 0 | 1 |
|2020 | 03 | 1 | 1 | 0 |
|2020 | 04 | 0 | 1 | -1 |
  • 3
  • Odpowiedz
@luke: select year(data) as year, month(data) as month, count(datastart) as datastart, count(datakoniec) as datakoniec, count(datastart)-count(datakoniec) as startkoniec from
(
select datastart as data, datastart, null as datakoniec
FROM table
union
select datakoniec as data, null as datastart, datakoniec
FROM table
) x

group by year(data), month(data)
  • Odpowiedz
@ostrykuc666: Dzięki, w międzyczasie dostałem odpowiedź też gdzie indziej i wydaje się, że działa poprawnie:

WITH dates (date) AS (
SELECT date_start FROM XYZ
UNION
SELECT date_end FROM XYZ
)
SELECT
[ROK] = YEAR(d.date),
[MIESIAC] = MONTH(d.date),
[URUCHOMIONE] = COUNT(DISTINCT s.id),
[ZAKONCZONE] = COUNT(DISTINCT e.id),
[ROZNICA] = COUNT(DISTINCT s.id) - COUNT(DISTINCT e.id)
FROM
dates d
LEFT OUTER JOIN XYZ s ON s.date_start = d.date
LEFT OUTER JOIN XYZ e ON e.date_end
  • Odpowiedz