SQL Server:用 0 为不存在的行填充 MAX(列)值

2022-12-31数据库问题
1

本文介绍了SQL Server:用 0 为不存在的行填充 MAX(列)值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

对于表中不存在的行,我想为 MAX_TIER 返回 0

I want to return 0 for MAX_TIER for non existing rows in table

这是我目前的代码:

SELECT   
    LAST_YARD_BAY, LAST_YARD_ROW, MAX(LAST_YARD_TIER) as MAX_TIER
FROM
    Handlift
WHERE 
    HDCHKOUTD_OUT IS NULL 
    AND LIFLAG = 'A'
    AND LAST_YARD_PARK = 'J1'
GROUP BY 
    LAST_YARD_BAY, LAST_YARD_ROW
ORDER BY 
    LAST_YARD_BAY, LAST_YARD_ROW;

截图显示了部分结果:

对于 Bay 005 我有 MAX_TIER 用于 ROWS 00A00G,但是对于 Bay 007 我只有 3 行:00E00F00G.

For Bay 005 I have MAX_TIER for ROWS 00Ato 00G, but for Bay 007 I have only 3 Rows: 00E,00F and 00G.

如何为 4 个缺失的行(00A00B00C)填充 MAX_TIER00D) Bay 007 和其他缺失的行?

How can I populate MAX_TIER with value 0 for the 4 missing rows (00A, 00B, 00C and 00D) of Bay 007 and the other missing rows?

推荐答案

这就是您要找的吗?

SELECT *
FROM T
WHERE LastYardBay = '005'
UNION
SELECT '007',
       T1.LastYardRow,
       ISNULL(T2.MaxTier, 0)
FROM 
    (
      SELECT *
      FROM T
      WHERE LastYardBay = '005'
    ) T1
    LEFT JOIN
    (
      SELECT *
      FROM T
      WHERE LastYardBay = '007'
    ) T2
ON T1.LastYardRow = T2.LastYardRow;

退货:

+-------------+-------------+---------+
| LastYardBay | LastYardRow | MaxTier |
+-------------+-------------+---------+
|         005 | 00A         |       3 |
|         005 | 00B         |       4 |
|         005 | 00C         |       1 |
|         005 | 00D         |       1 |
|         005 | 00E         |       1 |
|         005 | 00F         |       4 |
|         005 | 00G         |       1 |
|         007 | 00A         |       0 |
|         007 | 00B         |       0 |
|         007 | 00C         |       0 |
|         007 | 00D         |       0 |
|         007 | 00E         |       5 |
|         007 | 00F         |       4 |
|         007 | 00G         |       1 |
+-------------+-------------+---------+

现场演示

更新:

因为你已经有了 '005' 你只需要一个 CROSS JOIN 然后用 IS NULL as 过滤

Since you already have '005' you need just a CROSS JOIN then filter with IS NULL as

WITH A AS
(
SELECT       T1.LastYardBay LYB1,
             T1.LastYardRow LYR1,
             T1.MaxTier MT1,
             T2.LastYardBay LYB2,
             T2.LastYardRow LYR2,
             T2.MaxTier MT2
FROM 
    (
      SELECT *
      FROM T
      WHERE LastYardBay = '005'
    ) T1
    CROSS JOIN
    (
      SELECT *
      FROM T
      WHERE LastYardBay != '005'
    ) T2
)
SELECT *
FROM T
WHERE LastYardBay = '005'
UNION
SELECT  LYB2,
        LYR1,   
        CASE WHEN LYR2 = LYR1 THEN MT2 ELSE 0 END MT
FROM A LEFT JOIN T ON A.LYB2 IS NULL;

这篇关于SQL Server:用 0 为不存在的行填充 MAX(列)值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

Mysql目录里的ibtmp1文件过大造成磁盘占满的解决办法
ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致...
2025-01-02 数据库问题
151

按天分组的 SQL 查询
SQL query to group by day(按天分组的 SQL 查询)...
2024-04-16 数据库问题
77

SQL 子句“GROUP BY 1"是什么意思?意思是?
What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)...
2024-04-16 数据库问题
62

MySQL groupwise MAX() 返回意外结果
MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)...
2024-04-16 数据库问题
13

MySQL SELECT 按组最频繁
MySQL SELECT most frequent by group(MySQL SELECT 按组最频繁)...
2024-04-16 数据库问题
16

在 Group By 查询中包含缺失的月份
Include missing months in Group By query(在 Group By 查询中包含缺失的月份)...
2024-04-16 数据库问题
12