我正在尝试格式化结果,以便联合结果显示为重复列。抱歉没有解释得那么好,希望这个简化的例子能更好地证明:
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,但我的大脑融化了。
答案 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”列。
使用这么多单独的表可能看起来很麻烦,但从长远来看它会更容易,并且会使自动化变得非常简单。
同样,我会使用一个仓库表,并整理这些信息以创建商店。
如果你真的想拥有那种类型的表结构,那么如果这样可以让事情变得更容易,那么就将表中的数据整理成一个新表。
每日提示:将事情分解为原子形式&数据库将自行解决。也明智地使用时间..
:)