给定一个特定的列值,在T-SQL中合并两个列
我有一个包含以下内容(简化)的表格: 这是期望的结果: 简而言之,第一列有数百个值,有时会重复,对于给定的IDPRODUCTFIRST值,我需要一个具有给定值+值的结果列当然是第二给定一个特定的列值,在T-SQL中合并两个列,sql,tsql,Sql,Tsql,我有一个包含以下内容(简化)的表格: 这是期望的结果: 简而言之,第一列有数百个值,有时会重复,对于给定的IDPRODUCTFIRST值,我需要一个具有给定值+值的结果列当然是第二 SELECT IDPRODUCTSECOND AS RESULT FROM [SCIOHIST].[dbo].[RELATIONPRODUCTMATCHES] WHERE IDPRODUCTFIRST = 228697 通过上面的查询,我只能得到值在第二列中,如何将第一列中的给定值(例如228697)添
SELECT IDPRODUCTSECOND AS RESULT
FROM [SCIOHIST].[dbo].[RELATIONPRODUCTMATCHES]
WHERE IDPRODUCTFIRST = 228697
通过上面的查询,我只能得到值在第二列中,如何将第一列中的给定值(例如228697)添加到结果列中?一种方法是取消IVOT并选择不同的值:
SELECT DISTINCT v.RESULT
FROM [SCIOHIST].[dbo].[RELATIONPRODUCTMATCHES] RPM CROSS APPLY
(VALUES (IDPRODUCTFIRST), (IDPRODUCTSECOND)) V(RESULT)
WHERE IDPRODUCTFIRST = 228697;
一种方法是取消PIVOT并选择不同的值:
SELECT DISTINCT v.RESULT
FROM [SCIOHIST].[dbo].[RELATIONPRODUCTMATCHES] RPM CROSS APPLY
(VALUES (IDPRODUCTFIRST), (IDPRODUCTSECOND)) V(RESULT)
WHERE IDPRODUCTFIRST = 228697;
where子句是否存在。
如果要在结果中的两列中都使用重复值,可以使用“UNION ALL”而不是“UNION”
where子句是否存在。
如果您希望结果中的两列中都有重复的值,您可以使用“UNION ALL”而不是“UNION”。您可以使用
UNION
; With cteProd
as
(
SELECT IDPRODUCTFIRST, IDPRODUCTSECOND
FROM [SCIOHIST].[dbo].[RELATIONPRODUCTMATCHES]
)
Select RESULT from
(
SELECT IDPRODUCTFIRST, IDPRODUCTFIRST AS RESULT
FROM cteProd
Union
SELECT IDPRODUCTFIRST, IDPRODUCTSECOND AS RESULT
FROM cteProd
) Q
WHERE IDPRODUCTFIRST = 228697
这是您可以使用的
Union
; With cteProd
as
(
SELECT IDPRODUCTFIRST, IDPRODUCTSECOND
FROM [SCIOHIST].[dbo].[RELATIONPRODUCTMATCHES]
)
Select RESULT from
(
SELECT IDPRODUCTFIRST, IDPRODUCTFIRST AS RESULT
FROM cteProd
Union
SELECT IDPRODUCTFIRST, IDPRODUCTSECOND AS RESULT
FROM cteProd
) Q
WHERE IDPRODUCTFIRST = 228697
这里是另一个选项是取消PIVOT
示例
Declare @YourTable Table ([IDPRODUCTFIRST] varchar(50),[IDPRODUCTSECOND] varchar(50)) Insert Into @YourTable Values
(228697,228699)
,(228697,228701)
Select Distinct Result
From (Select [IDPRODUCTFIRST],[IDPRODUCTSECOND]
From @YourTable
Where [IDPRODUCTFIRST] = 228697
) a
Unpivot ( Result for Item in ([IDPRODUCTFIRST],[IDPRODUCTSECOND]) ) unp
返回
Result
228697
228699
228701
另一个选择是取消PIVOT
示例
Declare @YourTable Table ([IDPRODUCTFIRST] varchar(50),[IDPRODUCTSECOND] varchar(50)) Insert Into @YourTable Values
(228697,228699)
,(228697,228701)
Select Distinct Result
From (Select [IDPRODUCTFIRST],[IDPRODUCTSECOND]
From @YourTable
Where [IDPRODUCTFIRST] = 228697
) a
Unpivot ( Result for Item in ([IDPRODUCTFIRST],[IDPRODUCTSECOND]) ) unp
返回
Result
228697
228699
228701
选择228697作为结果union all代码>?选择228697作为结果union all代码>?使用联合
而不是联合所有
进行两次不同的
查询和一次额外的不同查询?否。不需要额外查询。仅使用union或union ALL2distinct
查询这两个查询,并使用union
而不是union all
进行额外的distinct查询?不需要。您不需要额外的查询。只需使用union或union进行这两个查询all@HABO,它似乎不仅仅适用于228698,它似乎适用于任何IDPRODUCTFIRST值。OP显示列指定的值(例如228697)
,该值无论如何都将从主表中查询。我把它放在只有一个过滤条件的地方。或者,如果要在开始时完成,我可以使用cte内部的过滤。@哈博,它似乎不仅仅适用于228698,它看起来适用于任何第一个值。OP显示列指定的值(例如228697)
,该值无论如何都将从主表中查询。我把它放在只有一个过滤条件的地方。或者,如果要在开始时完成,我可以使用cte内部的过滤。