TSQL:如果 Column = Null 如何返回两行

卡琳 B.

我必须构建一个程序,在最后返回一个表,其中包含应用特定物质的字段列表。我需要为每个字段和应用的物质返回一行。这适用于实际应用了某些内容的所有字段,但我还需要为这些字段显示相同数量的行,如果没有应用任何内容。

目前我得到一张这样的表:

Field 1 | Substance 1 | 12345 kg
Field 1 | Substance 2 | 23423 kg
Field 2 | Substance 1 | 23236 kg
Field 2 | Substance 2 | 12312 kg
Field 3 | NULL        | NULL

我知道我可以通过创建 Case-Condition 将 NULL 值与至少一种物质交换,但我需要包含每种物质名称的两行(一行用于物质 1,另一行用于物质 2)。

有没有办法实现这一目标?

拉兹万社会

或者也许你有这样的事情:

CREATE TABLE Fields (
    FieldID INT PRIMARY KEY,
    FieldName VARCHAR(50) NOT NULL UNIQUE,
)

INSERT INTO dbo.Fields (FieldID, FieldName) VALUES
(1, 'Field 1'),
(2, 'Field 2'),
(3, 'Field 3')

CREATE TABLE dbo.Substances (
    SubstanceID INT PRIMARY KEY,
    Substance VARCHAR(50) NOT NULL UNIQUE
)

INSERT INTO dbo.Substances (SubstanceID, Substance) VALUES
(1, 'Substance 1'),
(2, 'Substance 2')

CREATE TABLE AppliedSubstances (
    FieldID INT NOT NULL REFERENCES dbo.Fields,
    SubstanceID INT NOT NULL REFERENCES dbo.Substances,
    Quantity INT NOT NULL
)

INSERT INTO dbo.AppliedSubstances (FieldID, SubstanceID, Quantity) VALUES 
(1, 1, 12345),
(1, 2, 23423),
(2, 1, 23236),
(2, 2, 12312)

然后您可以使用以下查询:

SELECT f.FieldName, s.Substance, a.Quantity
FROM dbo.AppliedSubstances a
INNER JOIN dbo.Fields f ON f.FieldID = a.FieldID
INNER JOIN dbo.Substances s ON s.SubstanceID = a.SubstanceID
UNION ALL
SELECT f.FieldName, s.Substance, NULL AS Quantity
FROM dbo.Fields f
CROSS JOIN dbo.Substances s
WHERE NOT EXISTS (
    SELECT * FROM dbo.AppliedSubstances a
    WHERE a.FieldID=f.FieldID AND a.SubstanceID=s.SubstanceID
)

或者更短的陌生人版本(如果您有一些仅适用于某些领域的物质,则具有不同的含义):

SELECT f.FieldName, s.Substance, a.Quantity
FROM dbo.AppliedSubstances a
RIGHT JOIN dbo.Fields f ON f.FieldID = a.FieldID
INNER JOIN dbo.Substances s ON s.SubstanceID = ISNULL(a.SubstanceID,s.SubstanceID)

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过仅更新 TSQL 中的 NULL 值来合并两行?

如果两行重叠,如何在Pandas / Python中比较两行

如何使用 Lead() 函数向前返回两行的值,以便倒数第二行和最后一行值不返回 null?

MySQL Select Column如果不是Null

如果column为null,则返回特定字符串的SQL查询?

如果多于两行的值是“ Fail”,则水晶报表将返回“ Fail”

如果Column_B为NULL,如何确保Column_A只能有一个值?反之亦然

如果一列中的图案匹配两行,如何打印新行?

如果某些值是null,如何在SUM中返回null?

如果两列都不是 NULL,我如何让 SQL 'When' 子句只返回 concat 数据?

如果它们在 Notepad++ 中出现多次,如何删除它们?(删除两行!)

如果column为null,则雄辩地使用默认值

如果两行具有相同的值,则返回该行包括特定列的最大值。

在Tsql中,如果值不为空,如何替换值?

如果第二行包含与第一行相同的匹配项,如何打印两行?

SQL Server如何返回NULL而不是0,如果GROUPED值在源中没有行

如果列数据从 SQL Server 返回 null,如何隐藏 DataList 中的表行

如果String.Join中为null,如何返回行值

Sed / Awk:如果重复第一行中的模式,如何查找和删除两行;重击

如果join返回null,则在默认行上进行联接

如果找不到行,则Django Coalesce返回null

如果未找到任何行,则返回NULL SQL

如果值是熊猫的Nan则合并两行

如果None或nan合并两行熊猫

SQL - 如果差异低于阈值,则合并两行

连接两行(如果它们不为空)

如果每两行以相同的名称开头,请选择

如果两个值中的任何一个为null,则Java Stream返回null

如果子查询返回null,则mysql返回null