将多行合并为一行

迈克尔恩

我有一个像这样的表结构: so_1.png

我需要获取每列的最新值!= NULL。我当前的方法是使用这样的UNION语句:

SELECT TOP 1 testlong1_min, testlong1_max, NULL, NULL, NULL, NULL, NULL, NULL FROM Grenzwerte WHERE testlong1_min IS NOT NULL AND testlong1_max IS NOT NULL UNION 
SELECT TOP 1 NULL, NULL, testlong2_min, testlong2_max, NULL, NULL, NULL, NULL FROM Grenzwerte WHERE testlong2_min IS NOT NULL AND testlong2_max IS NOT NULL UNION 
SELECT TOP 1 NULL, NULL, NULL, NULL, testlong3_min, testlong3_max, NULL, NULL FROM Grenzwerte WHERE testlong3_min IS NOT NULL AND testlong3_max IS NOT NULL UNION 
SELECT TOP 1 NULL, NULL, NULL, NULL, NULL, NULL, testlong4_min, testlong4_max FROM Grenzwerte WHERE testlong4_min IS NOT NULL AND testlong4_max IS NOT NULL 

这似乎不起作用,我的结果是空的。我还考虑过对每个字段执行1个查询,但是与UNION语句相比,我想这会增加太多开销。

问题:

有没有办法浓缩列并在一行中返回最新值?

编辑

使用Parodo的建议,我现在得到了这个结果,现在我需要将这些行合并为一个。

在此处输入图片说明

詹尼斯·帕拉斯科沃波洛斯

在下面的语句中,每个CTE仅具有所有各自的非null对,并且还将获得一个行号,其中最新ID的值为1。因此,我仅基于每个CTE的行号获得最新的ID,因此每个只有一排。这样,CROSS JOINING将导致单行具有所需的结果。

;WITH testLong1CTE AS
(
    SELECT testlong1_min, testlong1_max, ROW_NUMBER()OVER(ORDER BY ID DESC) AS rn
    FROM   Table
    WHERE  testlong1_min IS NOT NULL AND testlong1_max IS NOT NULL
),testLong2CTE AS
(
    SELECT testlong2_min, testlong2_max, ROW_NUMBER()OVER(ORDER BY ID DESC) AS rn
    FROM   Table
    WHERE  testlong2_min IS NOT NULL AND testlong2_max IS NOT NULL
),testLong3CTE AS
(
    SELECT testlong3_min, testlong3_max, ROW_NUMBER()OVER(ORDER BY ID DESC) AS rn
    FROM   Table
    WHERE  testlong3_min IS NOT NULL AND testlong3_max IS NOT NULL
),testLong4CTE AS
(
    SELECT testlong4_min, testlong4_max, ROW_NUMBER()OVER(ORDER BY ID DESC) AS rn
    FROM   Table
    WHERE  testlong4_min IS NOT NULL AND testlong4_max IS NOT NULL
)
SELECT testlong1_min, 
       testlong1_max,
       testlong2_min, 
       testlong2_max,
       testlong3_min, 
       testlong3_max,
       testlong4_min, 
       testlong4_max
FROM (SELECT testlong1_min, testlong1_max FROM testLong1CTE WHERE rn = 1) AS T1
CROSS JOIN (SELECT testlong2_min, testlong2_max FROM testLong2CTE WHERE rn = 1) AS T2
CROSS JOIN (SELECT testlong3_min, testlong3_max FROM testLong3CTE WHERE rn = 1) AS T3
CROSS JOIN (SELECT testlong4_min, testlong4_max FROM testLong4CTE WHERE rn = 1) AS T4

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将多行合并为一行

来自分类Dev

将多行合并为一行

来自分类Dev

将多行合并为一行

来自分类Dev

将多行合并为一行

来自分类Dev

将多行合并为一行MySQL

来自分类Dev

PostgreSQL选择查询“将多行合并为一行”

来自分类Dev

将PostgreSQL中的多行合并为一行?

来自分类Dev

将多行记录合并为一行

来自分类Dev

SQL:将多行与空字段合并为一行

来自分类Dev

将多行MYSQL合并为一行

来自分类Dev

尝试将表中的多行合并为一行

来自分类Dev

将多行合并为一行 - mysql

来自分类Dev

Unix命令将多行合并为一行

来自分类Dev

Crystal Reports -- 将多行合并为一行

来自分类Dev

SQL将一张表的多行合并为多列的一行

来自分类Dev

ACCESS / SQL将多行与一列合并为一行并创建多列

来自分类Dev

使用一个公共字段将多行合并为一行

来自分类Dev

使用SQL时将多行合并为一行(一列)

来自分类Dev

需要 oracle 查询将多行合并为一行,每行一列

来自分类Dev

将多行合并为一行一列 Python

来自分类Dev

将具有相同ID的多行合并为一行

来自分类Dev

将多行合并为一行以替换列中的空值

来自分类Dev

MySQL根据匹配日期将多行合并为一行

来自分类Dev

使用python熊猫将csv文件中的多行合并为一行

来自分类Dev

根据熊猫中的列值将多行合并为一行

来自分类Dev

大熊猫将多行合并为有条件的一行

来自分类Dev

将多行电话数据合并为显示开始和结束日期的一行的脚本

来自分类Dev

将具有不同日期/变量的多行合并为一行

来自分类Dev

将多行合并为具有相同列数的一行