Saya mencari solusi dalam hal bergabung dan MSSQL.

Saya punya dua meja.

Yang pertama Tabel Dasar:

ID, Name, Key
1, Test1, 1x11
2, Test2, 2x22
3, Test3, 3x33

Yang kedua adalah tabel yang ingin saya gabungkan ke tabel Basic:

Key, Action, create,         close,           duration
1x11,   1,  01/01/2021 06:00,01/01/2021 07:00,  1
1x11,   5,  01/01/2021 07:00,01/01/2021 10:00,  1
1x11,  10,  01/01/2021 10:00,0,                 0
2x22,   1,  01/01/2021 10:00,01/01/2021 11:00,  1
2x22,   5,  01/01/2021 11:00,01/01/2021 12:00,  1
2x22,   7,  01/01/2021 12:00,01/01/2021 13:00,  1
2x22,   5,  01/01/2021 13:00,01/01/2021 14:00,  1
2x22,  10,  01/01/2021 14:00,0,                 0
3x33,   1,  01/01/2021 10:00,01/01/2021 12:00,  2
3x33,  10,  01/01/2021 12:00,0,                 0

Dalam tabel ini closedate tidak diberikan, jadi saya harus menggunakan perintah berikut untuk mendapatkan closedate (closedate adalah yang dibuat berikutnya):

 lead (create,1) OVER (PARTITION BY Key ORDER BY create) AS close

Sekarang, tujuan saya adalah menggabungkan jumlah (dari ActionNumber 5 per Kunci) ke tabel dasar

Dapatkah seseorang memberitahu saya bagaimana melakukan itu? Saya benar-benar frustrasi.

Tabel Akhir:

ID, Name, Key, join(sum of 5)
1, Test1, 1x11,1
2, Test2, 2x22,2 (because there are two times one hour that means 2h)
3, Test3, 3x33,0

Terima kasih telah membantu. Kristen

1
segerchr 8 Januari 2021, 18:12

3 jawaban

Jawaban Terbaik

Jika dua tabel ada maka ini harus menjadi agregasi sederhana.

SELECT
    B.ID,
    B.Name,
    B.Key,
    CountAction5 = SUM(CASE WHEN S.Action = 5 THEN Duration ELSE 0 END)
FROM
    BasicTable B
    INNER JOIN SecondTable S ON S.Key = B.Key
GROUP BY
    B.ID,
    B.Name,
    B.Key
0
Ross Bush 8 Januari 2021, 15:21

Terima kasih untuk semua atas bantuan Anda. Kristen

0
segerchr 13 Januari 2021, 08:21

Ini sederhana, yang Anda butuhkan hanyalah melakukan agregasi bersyarat:

SELECT [key], SUM(CASE WHEN Action = 5 THEN duration ELSE 0 END)
FROM t
GROUP BY [key]

Di mana t adalah tabel kedua.

Keluaran:

key sum_of_5
-------------
1x11    1
2x22    2
3x33    0

Untuk bergabung kembali ke tabel asli, gunakan tabel turunan:

SELECT [key], name, sum_of_5
FROM t1
JOIN (
    SELECT 
       [key]
       , SUM(CASE WHEN Action = 5 THEN duration ELSE 0 END)
    FROM t
    GROUP BY [key]
) t2 ON t1.[key] = t2.[key]

Demo disini

0
Giorgos Betsos 8 Januari 2021, 15:25