Sql server 2008 SQL联合查询,将结果显示为附加列

Sql server 2008 SQL联合查询,将结果显示为附加列,sql-server-2008,pivot,union,Sql Server 2008,Pivot,Union,我正在尝试格式化结果,以便联合结果显示为重复列。抱歉没有很好地解释这一点,希望这个简化的示例能够更好地演示: select * from ( SELECT Id, SKU, BrandName, ItemName , StoreName as Store1, Qty as Qty1, null as Store2, null AS Qty2, where Stores.Id =

我正在尝试格式化结果,以便联合结果显示为重复列。抱歉没有很好地解释这一点,希望这个简化的示例能够更好地演示:

select  * from (
SELECT  Id,
        SKU,
        BrandName,
        ItemName ,
        StoreName as Store1,
        Qty as Qty1,
        null as Store2,
        null  AS Qty2,
 where Stores.Id = 1
UNION ALL
SELECT  Id,
        SKU,
        BrandName,
        ItemName ,
        null as Store1,
        null as Qty1,
        StoreName as Store2,
        Qty as Qty2
 where Stores.Id = 3
)as x
     group by x.Id, etc...
因此,通过在查询中使用“虚拟”列,我可以返回几乎像我想要的数据:

Id    | SKU       | Brand  | ItemName      | Store1    | Qty1 |Store2   | Qty2
------+-----------+--------+---------------+-----------+------+---------+-----
4441  | 15JE1215  | Ibanez | Metallic Grey | NULL      | NULL | Exeter  | 1
4441  | 15JE1215  | Ibanez | Metallic Grey | London    | 895  | NULL    | NULL 

我想把这两行合并成一行,即用另一行的值替换空值。我看着PIVOT,但我的大脑融化了。

用户内部连接或左外部连接

SELECT T1.Id, T1.SKU, T1.BrandName, T1.ItemName, ISNULL(T1.Store1,T2.Store1) As Store1
, ISNULL(T1.Qty1, T2.Qty1) AS Qty1, ISNULL(T1.Store2,T2.Store2) As Store2
,ISNULL(T1.Qty2, T2.Qty2) AS Qty2
FROM
(
       SELECT  Id,
        SKU,
        BrandName,
        ItemName ,
        StoreName as Store1,
        Qty as Qty1,
        null as Store2,
        null  AS Qty2,
   where Stores.Id = 1
) T1
INNER JOIN
(
    SELECT  Id,
        SKU,
        BrandName,
        ItemName ,
        null as Store1,
        null as Qty1,
        StoreName as Store2,
        Qty as Qty2
     where Stores.Id = 3
) T2 ON (T1.Id = T2.Id .. etc)

编辑:提前道歉,因为我没有给你一个问题的“直接解决方案”,因为我觉得你会从“教人钓鱼”的精神中受益更多

就个人而言,我会说,你需要一个单独的商店表,然后创建一个“组”表,或者更好,有一个单独的库存表,列出每个产品的SKU,它的位置,等等

-------------- | pInfo | -------------- - pRid - pSku - pName - pDesc - pImage -------------- | pStock | -------------- - pRid - pSku - pStore - pStatus -------------- |品脱| -------------- -撬 -pSku -pName -pDesc -皮马杰 -------------- |pStock| -------------- -撬 -pSku -pStore -普斯塔斯 然后对每个项目进行核算,只需要一个信息条目,即可与SKU的库存信息进行匹配和核对

与Store1和Store2不同的是,只需设置“Stores”,并为stock表中的每个项目指定一个存储代码(如中所示,每个项目)

如果您打开了更多的存储,现在只需将另一条记录添加到存储表中,而不是改变整个结构以添加“Store3”列

使用这么多独立的表似乎很麻烦,但从长远来看,这要容易得多,而且自动化也非常容易

类似地,我会使用一个仓库表,并整理这些信息来创建仓库

如果您真的想拥有这种类型的表结构,那么可以将表中的数据整理到一个新表中,如果这样做可以使事情变得更简单的话

一天的小贴士:把事情分解成原子形式&数据库将自行解决。也要明智地利用时间


:)

在这里,你不能只使用一个完整的外部连接而不是一个联合,例如,在上面的例子中,使用Id、SKU、品牌、ItemName来连接。一个完整的外部连接将处理只有一个存储区有一个该列集合的条目的情况,但如果这种情况从未发生,您可以使用内部连接来代替。谢谢你的回答,但这正是我的结构,我只是为了问题的目的简化了查询。如果你看一下我的查询,我实际上已经在原始查询的
Stores.Id
中留下了。