我正在尝试 加入 。
来自 项目表 ,其中包含产品信息 ItemID,UpcCode,Facing,ItemNameArabic,ShelfCapacity 除 SERVICETYPE
之外的所有内容加入计划& 的ServiceType。
正如您在图片中看到的那样,对于几乎相同的数据,有两行,除了一行说明 ServiceType ( VMF 或 SRR )
我想要的是行数应该减少。如果你参考图片。 NESCAFE GOLD 50G 重复两次。一次用于VMF& SRR。我只想通过使用下面的任何一种方法出现一次
它就像2列[布尔列]
a)VMF列[如果值为VMF则为'是'或否则'否']
b)SRR栏[如果值为SRR则为'是'或否则'否']
或
一列[ ServiceType ]
如果它检查是否有SRR,则只显示SRR,否则显示Vmf
在任何上述期望的结果中,将减少我的行数
谢谢
答案 0 :(得分:1)
通过仅处理 ServiceType 列,每个 ItemName 不会获得1行。
查看附件:您在其他列中有不同的数据,例如面对和 ShelfCapacity 。
如果您希望每个项目名称获得1行,则有两个选项:
答案 1 :(得分:1)
SELECT case when vmf is null then 0 else 1 end as vmf,
case when srr is null then 0 else 1 end as srr,
UpcCode,date, StoreID
FROM
(SELECT itemid,items.UpcCode, ServiceType, date, ROW_NUMBER() OVER (ORDER BY servicetype) AS ROWNUMBER, s.ID as StoreID
FROM Items join Schedule on Items.upccode= schedule.upccode
) r
PIVOT
(
max (r.rownumber)
FOR r.servicetype IN( [vmf],[srr])
) AS pvt
的精彩回答
答案 2 :(得分:0)
我认为你可以尝试使用Case Statement
更改Select语句中的ServiceType SELECT ItemId,....., ServiceType =
CASE ServiceTypes
WHEN 'VMF' THEN 'True'
WHEN 'SRR' THEN 'False'
ELSE ''
END, InLimit, IpConcantenated
from ....
where ...
如果您想要重复该列,请使用两次
SELECT ItemId,.....,
ServiceTypeVMF =
CASE ServiceType
WHEN 'VMF' THEN 'True'
WHEN 'SRR' THEN 'False'
ELSE ''
END,
ServiceTypeSRR =
CASE ServiceType
WHEN 'VMF' THEN 'False'
WHEN 'SRR' THEN 'True'
ELSE ''
END,
InLimit,
IpConcantenated
from ....
where ...
以前的case语句会获取多行,但我认为如果你想将行转换为列,那么应该是你的sql语句,假设你提到的只有2行'VMF'和'SNR'< / p>
with cte as
(select ItemID, Upccode, ..............,
row_number() over(partition by ItemID, Upccode order by ServiceType) As rn
,ServiceType
,MinLimit
,IsContracted
from Items)
select ItemID, UpcCode,
max(case when rn = 1 then ServiceType end) as ServiceType1,
max(case when rn = 2 then ServiceType end) as ServiceType2,
,MinLimit
,IsContracted
from cte
group by ItemId, UpcCode,.........,MinLimit,IsContracted;