Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 pivot_Sql_Pivot Table - Fatal编程技术网

具有多个分组的sql pivot

具有多个分组的sql pivot,sql,pivot-table,Sql,Pivot Table,我有一张这样的桌子: EmpId--Meal--Day--Value 1--Brkfst--1--10 1--Brkfst--1--20 1--Brkfst--2--30 1--Lunch--3--40 2--Brkfst--1--50 2--Lunch--2--60 2--Brkfst--1--70 2--Brkfst--2--80 输出应为: EMPID--Meal--Day1--Day2--Day3 1--brkfst--10--30--null 1--brkfst-

我有一张这样的桌子:

EmpId--Meal--Day--Value

1--Brkfst--1--10

1--Brkfst--1--20

1--Brkfst--2--30

1--Lunch--3--40

2--Brkfst--1--50

2--Lunch--2--60

2--Brkfst--1--70

2--Brkfst--2--80
输出应为:

EMPID--Meal--Day1--Day2--Day3

1--brkfst--10--30--null

1--brkfst--20--null-null

1--lunch--null--null--40

2--brkfst--50--80--null

2--brkfst--70--null--null
基本上,每个员工对于一种膳食类型可以有不同的值,但在一天内可以有多种膳食类型。 imp point是指员工的所有膳食类型应在o/p中集中在一起,并且所有具有值的膳食类型应向上移动。 提前谢谢

DECLARE @someTable TABLE (empid INT, Meal VARCHAR(10), [Day] INT, Value INT);

INSERT INTO @someTable(empid, Meal, [Day], Value)
SELECT 1, 'Brkfst', 1, 10 UNION ALL
SELECT 1, 'Brkfst', 1, 20 UNION ALL
SELECT 1, 'Brkfst', 2, 30 UNION ALL
SELECT 1, 'Lunch',  3, 40 UNION ALL
SELECT 2, 'Brkfst', 1, 50 UNION ALL
SELECT 2, 'Lunch',  2, 60 UNION ALL
SELECT 2, 'Brkfst', 1, 70 UNION ALL
SELECT 2, 'Brkfst', 2, 80;

WITH SRC AS (
    SELECT empid, Meal, [Day], Value
    FROM @someTable        
)
SELECT empid, Meal, [1] AS Day1, [2] AS Day2, [3] AS Day3
FROM SRC
PIVOT(Sum(Value) FOR [Day] IN([1], [2], [3])) P
结果:

empid       Meal       Day1        Day2        Day3
----------- ---------- ----------- ----------- -----------
1           Brkfst     30          30          NULL
2           Brkfst     120         80          NULL
1           Lunch      NULL        NULL        40
2           Lunch      NULL        60          NULL

没有道理为什么您有两个EmpID=1和fine=brkfst组合的记录。当你转向时,你必须选择一些要分组的东西——从你的示例结果中,我假设你希望按EmpId和用餐分组,即使你不是。谢谢J Cooper的回复。但我不想汇总这些值。我想按原样显示膳食的所有值。因此,如果员工1第1天早餐有2个值,第2天早餐有2个值,然后,员工1应该有2行brkfast。如果他在BRKFSAT中有3个第1天的值和2个第2天的值,那么在o/p中应该有3行,第2天的第3个值为null。我希望o/p与我的原始查询中一样。如果不能使用透视和分区,还有其他解决方案吗?谢谢@user1202939-好的,假设在第一天的早餐中,员工1有两个值A,B。员工1在第2天的早餐中也有一个值C。如何确定哪个记录值C与A或B匹配?它应该直接进入最上面的空槽。不管是A还是B。只有员工和膳食组合应该匹配。@user1202939-这似乎是一个非常尴尬的要求。基本上你的查询结果是不确定的??我怀疑有更好的方法来实现你的目标。也许可以解释一下你在做什么,以及为什么你希望你的查询结果是你这样做的?很抱歉很晚才回复..我试图在crystal report中显示相同的结果..但是日期是从1到31..功能可以通过临时表实现,但是当有150000行时,它就需要折腾..有没有其他方法那么,没有支点也能实现这一目标吗?再次感谢!