给定一个特定的列值,在T-SQL中合并两个列

给定一个特定的列值,在T-SQL中合并两个列,sql,tsql,Sql,Tsql,我有一个包含以下内容(简化)的表格: 这是期望的结果: 简而言之,第一列有数百个值,有时会重复,对于给定的IDPRODUCTFIRST值,我需要一个具有给定值+值的结果列​​当然是第二 SELECT IDPRODUCTSECOND AS RESULT FROM [SCIOHIST].[dbo].[RELATIONPRODUCTMATCHES] WHERE IDPRODUCTFIRST = 228697 通过上面的查询,我只能得到值​​在第二列中,如何将第一列中的给定值(例如228697)添

我有一个包含以下内容(简化)的表格:

这是期望的结果:

简而言之,第一列有数百个值,有时会重复,对于给定的IDPRODUCTFIRST值,我需要一个具有给定值+值的结果列​​当然是第二

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 ALL2
distinct
查询这两个查询,并使用
union
而不是
union all
进行额外的distinct查询?不需要。您不需要额外的查询。只需使用union或union进行这两个查询all@HABO,它似乎不仅仅适用于228698,它似乎适用于任何IDPRODUCTFIRST值。OP显示
列指定的值(例如228697)
,该值无论如何都将从主表中查询。我把它放在只有一个过滤条件的地方。或者,如果要在开始时完成,我可以使用cte内部的过滤。@哈博,它似乎不仅仅适用于228698,它看起来适用于任何第一个值。OP显示
列指定的值(例如228697)
,该值无论如何都将从主表中查询。我把它放在只有一个过滤条件的地方。或者,如果要在开始时完成,我可以使用cte内部的过滤。