我从学校开始工作。我不习惯使用SQL,我试图抓住它......
我的主管给了我一个用户的任务,我需要在其中获取行数据和列。我们使用了交叉表向导并自动创建了SQL以获得我们需要的东西。
基本上,我们有一个这样的表:
ReqNumber Year FilledFlag(is a checkbox) FilledBy
1 2012 (notchecked) ITSchoolBoy
1 2012 (checked) GradStudent
1 2012 (notchecked) HighSchooler
2 etc, etc.
用户想要的是列出所有需求号码以及检查的内容
我们的自动透视代码为我们提供了所有FilledBy选项(总共有9个)作为列标题,并按要求对它们进行分组。
如果没有支点,你怎么能这样做?我想绕过这个问题。我能找到的最近的东西是:
SELECT
SUM(IIF(FilledBy = 'ITSchoolboy',1,0) as ITSchoolboy,
SUM(IIF(FilledBy = 'GradStudent',1,0) as GradStudent, etc.
FROM myTable
有人可以帮我解释一下吗?我指向导游的方向?我一直在寻找一天中最好的一部分,即使我是一名学生,我也不认为这会被嘲笑太长时间。但我真的很想知道!
答案 0 :(得分:1)
如果你是GROUP BY ReqNumber,我认为你老板的建议可行。
SELECT
ReqNumber,
SUM(IIF(FilledBy = 'ITSchoolboy',1,0) as ITSchoolboy,
SUM(IIF(FilledBy = 'GradStudent',1,0) as GradStudent,
etc.
FROM myTable
GROUP BY ReqNumber;
另一种方法是加入多个子查询。此示例提取了2个类别。如果你需要将它扩展到9个类别,你将会有很多加入。
SELECT
itsb.ReqNumber,
itsb.ITSchoolboy,
grad.GradStudent
FROM
(
SELECT
ReqNumber,
FilledFlag AS ITSchoolboy
FROM myTable
WHERE FilledBy = "ITSchoolboy"
) AS itsb
INNER JOIN
(
SELECT
ReqNumber,
FilledFlag AS GradStudent
FROM myTable
WHERE FilledBy = "GradStudent"
) AS grad
ON itsb.ReqNumber = grad.ReqNumber
请注意我并不是建议你应该使用这种方法。但是,既然您询问了枢轴方法的替代方法(哪个有效)......这就是其中之一。如果其他人提供更简单的替代方案,请继续关注。 : - )