Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从一张唱片制作两张唱片?_Sql_Sql Server_Stored Procedures - Fatal编程技术网

Sql 如何从一张唱片制作两张唱片?

Sql 如何从一张唱片制作两张唱片?,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有以下记录: Id Date MondayMorning MondayEvening TuesdayMorning, and so on 1 2012-01-01 2 3 2 2012-01-01 2 2 我想把记录1分成两张,因为周一早上和周一晚上的状态不一样。如果状态相同,则什么也不做 我期望的结果是: Id Date Monda

我有以下记录:

Id    Date          MondayMorning  MondayEvening  TuesdayMorning, and so on
1   2012-01-01          2               3   
2   2012-01-01          2               2 
我想把记录1分成两张,因为周一早上和周一晚上的状态不一样。如果状态相同,则什么也不做

我期望的结果是:

Id    Date          MondayMorning  MondayEvening  TuesdayMorning
1   2012-01-01          2               NULL          2
1   2012-01-01          NULL            3             2
2   2012-01-01          2               2 
请记住,其他日子也可能有所不同

我该怎么做

select id, date, mondaymorning as monday from yourtable
union
select id, date, mondayevening as monday from yourtable
默认情况下,联合将删除重复项

或者更一般地说

select distinct id, [date], value from yourtable
unpivot 
(value for day in (mondaymorning, mondayevening, ....)) u
默认情况下,联合将删除重复项

或者更一般地说

select distinct id, [date], value from yourtable
unpivot 
(value for day in (mondaymorning, mondayevening, ....)) u

我不完全理解您需要的输出,但是下面的脚本将为您提供表中的所有记录,然后是与星期一上午和星期一晚上不匹配的所有记录

SELECT * FROM table
UNION ALL
SELECT * FROM table WHERE table.MondayMorning <> table.MondayEvening
@艾哈迈特 尝试此操作以获取列中的空值

SELECT id
    ,date
    ,MondayMorning
    ,(CASE WHEN table.MondayEvening <> table.MondayMorning THEN NULL ELSE MondayEvening END) AS MondayEvening
    ,TuesdayMorning
    ,(CASE WHEN table.TuesdayEvening <> table.TuesdayMorning THEN NULL ELSE TuesdayEvening END) AS TuesdayEvening
FROM table 

UNION ALL 

SELECT id
    ,date
    ,NULL AS MondayMorning
    ,MondayEvening
    ,NULL AS TuesdayMorning
    ,TuesdayEvening
FROM table
WHERE table.MondayMorning <> table.MondayEvening
OR table.TuesdayMorning <> table.TuesdayEvening

我不完全理解您需要的输出,但是下面的脚本将为您提供表中的所有记录,然后是与星期一上午和星期一晚上不匹配的所有记录

SELECT * FROM table
UNION ALL
SELECT * FROM table WHERE table.MondayMorning <> table.MondayEvening
@艾哈迈特 尝试此操作以获取列中的空值

SELECT id
    ,date
    ,MondayMorning
    ,(CASE WHEN table.MondayEvening <> table.MondayMorning THEN NULL ELSE MondayEvening END) AS MondayEvening
    ,TuesdayMorning
    ,(CASE WHEN table.TuesdayEvening <> table.TuesdayMorning THEN NULL ELSE TuesdayEvening END) AS TuesdayEvening
FROM table 

UNION ALL 

SELECT id
    ,date
    ,NULL AS MondayMorning
    ,MondayEvening
    ,NULL AS TuesdayMorning
    ,TuesdayEvening
FROM table
WHERE table.MondayMorning <> table.MondayEvening
OR table.TuesdayMorning <> table.TuesdayEvening

由于您没有指定所需的输出,因此我提出了以下建议。让我们知道你的实际产量

Declare @t Table(Id int identity,[Date] Datetime,MondayMorning Int,MondayEvening Int)
Insert Into @t Select '2012-01-01',2,3 Union All Select '2012-01-01', 2,2

;With Cte As
(Select
    Id ,
    [Date],
    MondayMorning,
    MondayEvening,
    [Status] = Case When MondayMorning = MondayEvening Then '0' Else '1' End
From @t)
Select Id,[Date],MondayMorning,MondayEvening From Cte Where [Status] = 0
Union All
Select Id,[Date],MondayMorning,Null From Cte Where [Status] = 1
Union All
Select Id,[Date],Null,MondayEvening From Cte Where [Status] = 1

由于您没有指定所需的输出,因此我提出了以下建议。让我们知道你的实际产量

Declare @t Table(Id int identity,[Date] Datetime,MondayMorning Int,MondayEvening Int)
Insert Into @t Select '2012-01-01',2,3 Union All Select '2012-01-01', 2,2

;With Cte As
(Select
    Id ,
    [Date],
    MondayMorning,
    MondayEvening,
    [Status] = Case When MondayMorning = MondayEvening Then '0' Else '1' End
From @t)
Select Id,[Date],MondayMorning,MondayEvening From Cte Where [Status] = 0
Union All
Select Id,[Date],MondayMorning,Null From Cte Where [Status] = 1
Union All
Select Id,[Date],Null,MondayEvening From Cte Where [Status] = 1
检索员工0001详细信息,并创建该记录的两条记录



检索员工0001的详细信息,并为该记录创建了两条记录。

那么,所需的输出是什么呢?您的意思是说,您想要的记录数量与周一早上和周一晚上的差异一样多吗?请您编辑您的帖子,以编写所需的输出,但输入可能性很少。@dotnebeginner:我有。谢谢你,那么你想要的结果是什么呢?你是说你想要的记录和周一早上和周一晚上的记录一样多吗?请你编辑你的帖子,写下所需的输出,而不需要更多的输入机会。@dotnebeginner:是的。谢谢,我还有星期二上午,星期二晚上等等。什么样的查询比我需要的?@ USER 1781398:如果你有这样的列,我认为你的表不是很好的结构/标准化…我同意dotNETBIGLIN你应该只考虑早晚栏,日期栏将描述一周的一天。这个查询与我的表无关。我有一个declare表。@dotnebeginner:我知道,但这是一个现有表,我无法更改它。我需要将此表中的数据导入另一个表。这就是为什么我想把不同的日期部分分成两张唱片的原因。我还有周二早上,周二晚上等等。什么样的查询比我需要的?@ USER 1781398:如果你有这样的列,我认为你的表不是很好的结构/标准化…我同意dotNETBIGLIN你应该只考虑早晚栏,日期栏将描述一周的一天。这个查询与我的表无关。我有一个declare表。@dotnebeginner:我知道,但这是一个现有表,我无法更改它。我需要将此表中的数据导入另一个表。这就是我希望将不同的DatePart放入两条记录的原因。我需要用哪一列替换Value?Value是结果集中的一个新列。它将包含您的星期一。。。好的,谢谢。我使用的是变量表,所以不能使用这种方法。@user1781398变量表是什么意思?一个声明表,如:declare@table column int等。我需要用什么列替换值?Value是结果集中的一个新列。它将包含您的星期一。。。好的,谢谢。我使用的是变量表,所以我不能使用这种方法。@user1781398什么是变量表?一个声明表,如:declare@table column int等。这与所问的问题有什么关系?这与所问的问题有什么关系?