【问题标题】:Convert row data into columns Access 07 without using PIVOT将行数据转换为列 Access 07 不使用 PIVOT
【发布时间】:2012-04-11 14:21:45
【问题描述】:

我正在学校工作一个学期。我不太习惯使用 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 个)作为列标题,并按 reqnumber 分组。

没有枢轴你怎么能做到这一点?我想解决这个问题。我能找到的最近的是:

SELECT
   SUM(IIF(FilledBy = 'ITSchoolboy',1,0) as ITSchoolboy,
   SUM(IIF(FilledBy = 'GradStudent',1,0) as GradStudent, etc.
FROM myTable

谁能帮我解释一下?给我指个向导的方向?我一直在寻找一天中最好的部分,即使我是一名学生,我认为这不会被笑太久。但我真的很想知道!

【问题讨论】:

  • 并不是我会避免使用枢轴,只是因为我是这门语言的新手,我想学习如何用另一种方式来做。我的老板告诉我他会用不同的方式(上面提到的方式),因为他更喜欢“纯 SQL”。我想我只想知道增加我的知识就是全部(抱歉英语很糟糕)。
  • 你们 - 如此细心(而且聪明!)。我们没有使用 year 列,它是一个用于跟踪学生就业情况的表,因此假定它是针对当前年份的(尽管订单可能是在上一个日历年下达的)。

标签: sql ms-access ms-access-2007


【解决方案1】:

如果你按 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

请注意,我并不是建议您应该使用这种方法。但是,既然您询问了枢轴方法的替代方案(有效)......这是一个。请继续关注,以防其他人提供更简单的替代方案。 :-)

【讨论】:

  • 非常感谢,我只是想了解这些东西是如何工作的(一般来说)。我会听从你的建议并保持警惕。我同意,这将是一个非常多的加入......
  • 为枢轴的存在提供了一个相当有说服力的案例。 :-) Pivot 可以使一些挑战更容易处理,尤其是如果您可以使用该向导来指导您。
  • 我主要是在问,以防我遇到 PIVOT 不可用的情况(或者尤其是向导 - 虽然它们显然很方便,但你不会通过使用其中一个来学到很多东西) .
  • 我曾经避免那些手持魔法的笨蛋。后来我断定这是短视的。从 CrossTab 向导给我的开始,然后切换到 SQL 视图让我更好地理解了数据透视细节。所以我修改后的政策是在他们可以提供帮助的情况下使用向导,但不要沉迷于它们。
  • 我完全同意,但我喜欢了解巫师在做什么,一旦我对此感到满意,我就让它为我工作。这就像搅拌面包(以前的职业),我学会了用手搅拌面团,直到我对它有“感觉”,然后当我了解面团的外观、感觉和反应时,我开始使用搅拌机。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多