[英]Merge Select Statements in SQL
我有2个选择语句,但我需要合并两个结果,并在SECONDARY_MATERIAL
列旁边显示PRIMARY_MATERIAL
。 我目前正在使用UNION,它显示行中的所有内容(大约300行),但我真的只需要150行,并希望它显示在额外的列中。
SELECT RM_Materials.MaterialCode MatCode,
RM_MRPAttributeDefinitions.ShortDescription ProcessArea,
RM_MRPAttributes.AttributeValue AttValue
FROM DMI_Manu32.dbo.RM_MRPAttributeDefinitions
INNER JOIN (DMI_Manu32.dbo.RM_Materials
INNER JOIN DMI_Manu32.dbo.RM_MRPAttributes
ON (RM_Materials.MaterialUID = RM_MRPAttributes.MaterialUID)
AND (RM_Materials.InternalVersionNo = RM_MRPAttributes.MaterialVersionNo))
ON RM_MRPAttributeDefinitions.MRPAttributeDefinitionsUID = RM_MRPAttributes.MRPAttributeDefinitionsUID
WHERE RM_Materials.ActiveTF = 1
AND RM_MRPAttributes.ActiveTF = 1
AND "RM_MRPAttributeDefinitions"."ActiveTF" = 1
AND "RM_Materials"."DeletedTF" = 0
AND "RM_MRPAttributeDefinitions"."ShortDescription" = N'PRIMARY_MATERIAL'
AND "RM_Materials".ActiveTF = 1
UNION
SELECT RM_Materials.MaterialCode MatCode,
RM_MRPAttributeDefinitions.ShortDescription ProcessArea,
RM_MRPAttributes.AttributeValue AttValue
FROM DMI_Manu32.dbo.RM_MRPAttributeDefinitions
INNER JOIN (DMI_Manu32.dbo.RM_Materials
INNER JOIN DMI_Manu32.dbo.RM_MRPAttributes
ON (RM_Materials.MaterialUID = RM_MRPAttributes.MaterialUID)
AND (RM_Materials.InternalVersionNo = RM_MRPAttributes.MaterialVersionNo))
ON RM_MRPAttributeDefinitions.MRPAttributeDefinitionsUID = RM_MRPAttributes.MRPAttributeDefinitionsUID
WHERE RM_Materials.ActiveTF = 1
AND RM_MRPAttributes.ActiveTF = 1
AND "RM_MRPAttributeDefinitions"."ActiveTF" = 1
AND "RM_Materials"."DeletedTF" = 0
AND "RM_MRPAttributeDefinitions"."ShortDescription" = N'SECONDARY_MATERIAL'
AND "RM_Materials".ActiveTF = 1
我认为条件聚合会做你想要的。 但是,您的查询很难遵循。 我认为这是解决方案:
SELECT m.MaterialCode as MatCode,
d.ShortDescription as ProcessArea,
MAX(CASE WHEN ShortDescription = N'PRIMARY_MATERIAL' THEN a.AttributeValue
END) as PrimaryMaterial_AttValue,
MAX(CASE WHEN ShortDescription = N'SECONDARY_MATERIAL' THEN a.AttributeValue
END) as SecondaryMaterial_AttValue
FROM DMI_Manu32.dbo.RM_Materials m INNER JOIN
DMI_Manu32.dbo.RM_MRPAttributes a
ON m.MaterialUID = a.MaterialUID AND m.InternalVersionNo = a.MaterialVersionNo INNER JOIN
DMI_Manu32.dbo.RM_MRPAttributeDefinitions d
ON d.MRPAttributeDefinitionsUID = a.MRPAttributeDefinitionsUID
WHERE m.ActiveTF = 1 AND a.ActiveTF = 1 AND
d.ActiveTF = 1 AND
m.DeletedTF = 0
GROUP BY m.MaterialCode, d.ShortDescription;
笔记:
FROM
子句中的括号。 而且,通过INNER JOIN
,他们永远不需要。 括号通常会引起混淆。 WHERE
子句中重复条件(例如"RM_Materials".ActiveTF=1
)。 只需一个查询:
AND "RM_MRPAttributeDefinitions"."ShortDescription" IN (N'PRIMARY_MATERIAL',N'SECONDARY_MATERIAL' )
认为这可能会给你你想要的东西
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.