我不知道如何解释这一点,但我有一个带有ID变量PassengerID的数据集,然后是时间变量“时间”和每个交易的每个交易的类别变量“ItemA”或“ItemB”
在这种情况下,我为ItemA和ItemB创建了虚拟变量,两行都有变量Time
基本上我想把乘客分组在一起,所以我知道乘客1在TimeA买了ItemA,在TimeB买了ItemB。
我的第一个想法是创建TimeA和TimeB变量
select (case when ItemA=1 then Time) end as TimevarA,
(case when ItemB=1 then Time) end as TimevarB
试图找出如何
group by PassengerID
在ItemB
时,我可以为ItemA设置Time = TimeA,为TimeB设置Time = TimeB数据看起来像
DECLARE @t TABLE(
passengerID varchar(100),
itemA VARCHAR(100),
itemB VARCHAR(100),
timevar date
)
insert into @t values
('1','1','0','2015-01-01'),
('1','0','1','2015-02-01')
虽然目标是
DECLARE @goal TABLE(
passengerID varchar(100),
itemA VARCHAR(100),
itemB VARCHAR(100),
timevarA date,
timevarB date
)
insert into @goal values
('1','1','1','2015-01-01','2015-02-01')
感谢您的帮助
答案 0 :(得分:1)
我认为您正在寻找条件聚合。
select PassengerID,
max(case when ItemA = 1 then Time end) as TimevarA,
max(case when ItemB = 1 then Time end) as TimevarB
from @t
group by PassengerID;
答案 1 :(得分:0)
也许你应该重塑数据。即:
scope : true
答案 2 :(得分:0)
伙计,如果你有像
这样的数据('1','1','0','2015-01-01'), ('1','0','1','2015-02-01')
您可以获得"目标"像下面的SELECT一样使用
SELECT PassengerID,
max(itemA) itemA,
max(itemB) itemB,
max(case when ItemA = 1 then Time end) as timevarA,
max(case when ItemB = 1 then Time end) as timevarB
FROM @t
GROUP BY PassengerID;