我有以下记录:如何将一条记录拆分为两个并设置空值?
Id Date MondayMorning MondayEvening TuesdayMorning TuesdayEvening and so on
1 2012-01-01 2 3 2 2
2 2012-01-02 2 2 2 2
我想分裂记录1在两个记录,因为mondaymorning和mondayevening的状态是不一样的。如果国家是相同的,那么什么都不做。
,我希望得到的结果:
Id Date MondayMorning MondayEvening TuesdayMorning TuesdayEvening
1 2012-01-01 2 NULL 2 2
1 2012-01-01 NULL 3 NULL NULL
2 2012-01-02 2 2 2 2
请记住,还有其他的日子可能会有所不同。
我已经有一个查询,但是,neem有些变化。请参阅 SQL Fiddle上的查询。 您可以在这里看到的输出是出错的情况。对于TuesdayEvening和MondayEvening我期待2.
在SQL小提琴的信息是:
Declare @t Table(Id int identity,[Date] Datetime,MondayMorning Int,MondayEvening Int,TuesdayMorning Int,TuesdayEvening Int)
Insert Into @t Select '2012-01-01',0,2,0,2
SELECT id
,date
,MondayMorning
,(CASE WHEN MondayEvening <> MondayMorning THEN NULL ELSE MondayEvening END) AS MondayEvening
,TuesdayMorning
,(CASE WHEN TuesdayEvening <> TuesdayMorning THEN NULL ELSE TuesdayEvening END) AS TuesdayEvening
FROM @t
UNION ALL
SELECT id
,date
,NULL AS MondayMorning
,(CASE WHEN MondayEvening = MondayMorning THEN NULL ELSE MondayEvening END) AS MondayEvening
,NULL AS TuesdayMorning
,(CASE WHEN TuesdayEvening = TuesdayMorning THEN NULL ELSE TuesdayEvening END) AS TuesdayEvening
FROM @t
WHERE --MondayMorning <> MondayEvening
--OR TuesdayMorning <> TuesdayEvening
MondayMorning <> MondayEvening
AND (MondayMorning != 0 and MondayEvening != 0)
OR TuesdayMorning <> TuesdayEvening
AND (TuesdayEvening != 0 and TuesdayMorning != 0)
会发生什么,例如,如果MM = ME和TM <> TE并且WM = WE和DM <> DE – bummi
为什么您认为替代数据结构更可取?为什么不按照列ID,参考日期,星期几,AM或PM以及价值进行标准化?普遍认为即使只是周三上午和下午也要处理挫折和指数(或者因子)增长。上周日上午和下午不会考虑。 –
@bummi,[link](http://sqlfiddle.com/#!3/d41d8/5714)查看预期结果。它正在工作,但是在Mornings = 0和Evenings> 0的情况下,它会出错。 – Ahmet