久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何在不使用 MAX 聚合的情況下將多行顯示為一行

How to display multiple rows, as one row, without using a MAX aggregation(如何在不使用 MAX 聚合的情況下將多行顯示為一行)
本文介紹了如何在不使用 MAX 聚合的情況下將多行顯示為一行的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有一個包含很多行的表格,其中有幾個與全局相關的標識符,但在我當前的任務中,只有 3 列是重要的:

I have a table that contains A LOT of rows, with several identifiers that are relevant in the big picture, but in my current task, only 3 columns are important:

SiteIdentifier | SysTm | Signalet

SiteIdentifier 是一個數字,SysTm 是 DateTime,Signalet 是一個文本字段.防爆數據:

SiteIdentifier is a number, SysTm is DateTime and Signalet is a text field. Ex data:

587451 | 2021-03-01 00:00:00 | Left
587451 | 2021-03-04 07:12:17 | Joined
214537 | 2021-03-05 02:13:03 | Left
587451 | 2021-03-04 12:12:12 | Left
214537 | 2021-03-05 07:13:00 | Joined
587451 | 2021-03-08 01:04:07 | Joined

這是我想要實現的目標:我想創建一個可以顯示的查詢:

Here's what I want to achieve: I want to create a query that can display:

SiteIdentifier | SysTm of last Signalet Left | SysTm of last Signalet Joined | DATEDIFF(hour, ...  between last Left and Joined

在示例數據行的情況下,結果將是:獲取每個 SiteIdentifier 的每個實例很重要

In the case of the lines of example data, a result would be: It is important that I get EVERY instance of EVERY SiteIdentifier

587451 | 2021-03-01 00:00:00 | 2021-03-04 07:12:17 | 79
214537 | 2021-03-05 02:13:03 | 2021-03-05 07:13:00 | 5
587451 | 2021-03-04 12:12:12 | 2021-03-08 01:04:07 | 84

(每個 SiteIdentifier 可以表示 NUMEROUS 次)

這些行都包含在一張表中,這讓我很困惑...

These rows are all contained in one table, which is what is tripping me up...

我之前問過這個問題,并得到了這個查詢:

I asked this question earlier, and was given this query:

SELECT SiteIdentifier,
       MAX(CASE WHEN Signalet = 'Left' THEN SysTM END) as left_tm,
       MAX(CASE WHEN Signalet = 'Joined' THEN SysTM END) as Joined_tm,
       DATAEDIFF(hour,
                 MAX(CASE WHEN Signalet = 'Left' THEN SysTM END),
                 MAX(CASE WHEN Signalet = 'Joined' THEN SysTM END)
                ) as time_diff
FROM Table
WHERE Signalet IN ( 'Left', 'Joined')
GROUP BY SiteIdentifier
ORDER BY SiteIdentifier

這個查詢給了我最近的行"EACH SiteIdentifier,但不是所有結果.我試圖得到的結果是,正如我上面寫的,一個 SiteIdentifier 可以表示多次.

This query gave me the most recent "row" of EACH SiteIdentifier, but not all results. I am trying to get the result to be, as I wrote above, a SiteIdentifier can be represented multiple times.

推薦答案

如果您在 SiteIdentifier 中為每個 Signalet Left"添加行號和Joined",然后在匹配的行上加入你會得到想要的結果.

If you add a row number across the SiteIdentifier for each of Signalet "Left" and "Joined", and then join on the matching row you get the desired results.

注意:添加了笨重的第二個左連接來處理第一行不是左"記錄的情況.

Note: Added a clunky second left join to handle the case when the first row isn't a 'left' record.

declare @Test table (SiteIdentifier int, SysTm datetime2(0), Signalet varchar(21));

insert into @Test (SiteIdentifier, SysTm, Signalet)
values
(587451, '2021-03-01 00:00:00', 'Left'),
(587451, '2021-03-04 07:12:17', 'Joined'),
(214537, '2021-03-05 02:13:03', 'Left'),
(587451, '2021-03-04 12:12:12', 'Left'),
(214537, '2021-03-05 07:13:00', 'Joined'),
(587451, '2021-03-08 01:04:07', 'Joined');

with cte as (
    select *
      , row_number() over (partition by SiteIdentifier, Signalet order by SysTm) rn
    from @Test
)
select C1.SiteIdentifier, C1.SysTm, coalesce(C2.SysTm, C3.SysTm), datediff(hour, C1.SysTm, coalesce(C2.SysTm, C3.SysTm))
from cte C1
left join cte C2 on C2.SiteIdentifier = C1.SiteIdentifier and C2.Signalet = 'Joined' and C2.rn = C1.rn and C2.SysTm > C1.SysTm
left join cte C3 on C3.SiteIdentifier = C1.SiteIdentifier and C3.Signalet = 'Joined' and C3.rn = C1.rn + 1 and C3.SysTm > C1.SysTm and C2.rn is null
where C1.Signalet = 'Left'
order by C1.SysTm asc;

返回:

<頭>
站點標識符SysTm(左)SysTm(已加入)差異
5874512021-03-01 00:00:002021-03-04 07:12:1779
5874512021-03-04 12:12:122021-03-08 01:04:0785
2145372021-03-05 02:13:032021-03-05 07:13:005

請注意,如果您像我對您的問題所做的那樣添加 DDL+DML,您會更容易為人們提供幫助.

Note if you add DDL+DML as I have done to your questions you make it much easier for people to assist.

這篇關于如何在不使用 MAX 聚合的情況下將多行顯示為一行的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創建視圖?)
Create calculated value based on calculated value inside previous row(根據前一行內的計算值創建計算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 香蕉视频黄色 | 免费观看一级特黄欧美大片 | 奇米av| 午夜精品一区二区三区在线播放 | 午夜伦4480yy私人影院 | 久久久久无码国产精品一区 | 免费看片在线播放 | 国产三级 | 久久久精品影院 | 日韩视频 中文字幕 | 人人草天天草 | 国产精品久久久久久久久久久免费看 | 亚洲高清在线播放 | 日韩国产精品一区二区三区 | 日韩三级在线观看 | 日本三级全黄三级三级三级口周 | 免费网站在线 | 亚洲天堂av网| 精产国产伦理一二三区 | 精品国产不卡一区二区三区 | 国产一区不卡 | 久久久久久久久久久久久91 | 久久久久久女 | 亚洲国产精品一区在线观看 | 国产一区在线免费观看 | 久久五月婷 | 国产高清视频一区 | 欧美成人h版在线观看 | 中文字幕欧美一区二区 | 亚洲免费在线 | 做a视频| 一区二区三区视频在线免费观看 | 国产精品视频网站 | 天天爱天天操 | 国产精品99久久久久 | 国产精品一区在线 | av二区三区| 亚洲免费人成在线视频观看 | 日本一区二区三区在线观看 | 精品视频在线观看 | 亚洲国产欧美在线 |