SQL UNION查询,将结果显示为其他列

时间:2014-08-01 16:01:19

标签: 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 = 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 

我想将这两行合并为1,即用另一行的值替换NULL。我看着PIVOT,但我的大脑融化了。

2 个答案:

答案 0 :(得分:0)

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

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)

答案 1 :(得分:0)

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

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

--------------
| pInfo      |
--------------
 - pRid
 - pSku
 - pName
 - pDesc
 - pImage

--------------
| pStock     |
--------------
 - pRid
 - pSku
 - pStore
 - pStatus

然后考虑每个项目,只需要一个信息输入,可以与SKU的库存信息进行匹配和整理。

而不是Store1和Store2,只需拥有'商店',并为库存表中的每个项目提供商店代码(如每个项目)。

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

使用这么多单独的表可能看起来很麻烦,但从长远来看它会更容易,并且会使自动化变得非常简单。

同样,我会使用一个仓库表,并整理这些信息以创建商店。

如果你真的想拥有那种类型的表结构,那么如果这样可以让事情变得更容易,那么就将表中的数据整理成一个新表。

每日提示:将事情分解为原子形式&数据库将自行解决。也明智地使用时间..

:)