Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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
Oracle SQL摘要/透视表_Sql_Oracle_Pivot_Case_Crosstab - Fatal编程技术网

Oracle SQL摘要/透视表

Oracle SQL摘要/透视表,sql,oracle,pivot,case,crosstab,Sql,Oracle,Pivot,Case,Crosstab,我有一个如下所示的数据集: ID Description Team A Missing Name; Missing Gender Team1 B Missing Gender Team1 C Missing Name Team2 D Missing Name

我有一个如下所示的数据集:

    ID      Description                     Team
    A       Missing Name; Missing Gender    Team1
    B       Missing Gender                  Team1
    C       Missing Name                    Team2
    D       Missing Name                    Team2
    Team        Missing Gender      Missing Name
    Team1       2                   1
    Team2       0                   2
       SELECT
    "Team",
    sum(case when "DQ Info" like '%Missing Gender%' then 1 ELSE 0 END) as "Missing Gender",
    sum(case when "DQ Info" like '%Missing Name%' then 1 ELSE 0 END) as "Missing Name"
    FROM
    (*)
    GROUP BY "Team"
    Description                     Team1       Team2
    Missing Name; Missing Gender    1           0
    Missing Gender                  1           0
    Missing Name                    0           2
i、 e.每个ID都有一行,带有一个文本列(说明),用于标识ID的任何问题,以及ID所属团队的名称。我设法将其总结如下:

    ID      Description                     Team
    A       Missing Name; Missing Gender    Team1
    B       Missing Gender                  Team1
    C       Missing Name                    Team2
    D       Missing Name                    Team2
    Team        Missing Gender      Missing Name
    Team1       2                   1
    Team2       0                   2
       SELECT
    "Team",
    sum(case when "DQ Info" like '%Missing Gender%' then 1 ELSE 0 END) as "Missing Gender",
    sum(case when "DQ Info" like '%Missing Name%' then 1 ELSE 0 END) as "Missing Name"
    FROM
    (*)
    GROUP BY "Team"
    Description                     Team1       Team2
    Missing Name; Missing Gender    1           0
    Missing Gender                  1           0
    Missing Name                    0           2
通过使用如下所示的case语句:

    ID      Description                     Team
    A       Missing Name; Missing Gender    Team1
    B       Missing Gender                  Team1
    C       Missing Name                    Team2
    D       Missing Name                    Team2
    Team        Missing Gender      Missing Name
    Team1       2                   1
    Team2       0                   2
       SELECT
    "Team",
    sum(case when "DQ Info" like '%Missing Gender%' then 1 ELSE 0 END) as "Missing Gender",
    sum(case when "DQ Info" like '%Missing Name%' then 1 ELSE 0 END) as "Missing Name"
    FROM
    (*)
    GROUP BY "Team"
    Description                     Team1       Team2
    Missing Name; Missing Gender    1           0
    Missing Gender                  1           0
    Missing Name                    0           2
我希望能够总结这些数据,使其看起来像这样:

    Description         Team1       Team2
    Missing Gender      2           0
    Missing Name        1           2
我知道一定有办法做到这一点,但我目前正在努力——在上述字段中仅使用“描述”而不是“团队”,结果如下:

    ID      Description                     Team
    A       Missing Name; Missing Gender    Team1
    B       Missing Gender                  Team1
    C       Missing Name                    Team2
    D       Missing Name                    Team2
    Team        Missing Gender      Missing Name
    Team1       2                   1
    Team2       0                   2
       SELECT
    "Team",
    sum(case when "DQ Info" like '%Missing Gender%' then 1 ELSE 0 END) as "Missing Gender",
    sum(case when "DQ Info" like '%Missing Name%' then 1 ELSE 0 END) as "Missing Name"
    FROM
    (*)
    GROUP BY "Team"
    Description                     Team1       Team2
    Missing Name; Missing Gender    1           0
    Missing Gender                  1           0
    Missing Name                    0           2
这不是我想要的。任何帮助都是非常感谢的,尽管我会继续修补,所以如果我能找到答案,我会更新这篇文章。请注意,这只是数据集的一个示例,而不是实际的数据集

编辑:根据bpgergo的建议进行以下查询。在阅读了一些内容之后,下面的代码似乎会短路,即一旦满足内部大小写中的第一个条件,就会终止查询,这意味着它将永远无法对一列进行多次计数。很遗憾,但我想我必须坚持我最初的质疑

    SELECT
    "Description",
    sum(case when "Team" like 'Team1' then 1 ELSE 0 END) as "Team1",
    sum(case when "Team" like 'Team2' then 1 ELSE 0 END) as "Team2"
    FROM(SELECT
    "Team",
    case when "DQ Info" like '%[Check Role]%' then '[Check Role]'
    ELSE case when "DQ Info" like '%[Client deceased]%' then '[Client deceased]'
    ELSE case when "DQ Info" like '%[2 Parents not recorded]%' then '[2 Parents not recorded]'
    ELSE case when "DQ Info" like '%[Religion not recorded]%' then '[Religion not recorded]'
    ELSE case when "DQ Info" like '%[1st Language not recorded]%' then '[1st Language not recorded]'
    ELSE case when "DQ Info" like '%[Ethnicity not recorded]%' then '[Ethnicity not recorded]'
    ELSE case when "DQ Info" like '%[No Current Worker]%' then '[No Current Worker]'
    ELSE case when "DQ Info" like '%[No Current Team]%' then '[No Current Team]'
    ELSE case when "DQ Info" like '%[Update Gender]%' then '[Update Gender]'
    ELSE case when "DQ Info" like '%[No Plan]%' then '[No Plan]'
    ELSE case when "DQ Info" like '%[Update Plan]%' then '[Update Plan]'
    END END END END END END END END END END END
     as "Description"
    FROM(
    *
    FROM
    (*)WORKLOAD)DATA)
    GROUP BY "Description"

你已经走到一半了。尝试这样做作为内部选择

select 
case when "Description" like '%Missing Gender%' then "Missing_gender" 
ELSE case when "Description" like '%Missing Name%' then "Missing_name" ELSE null END
END as "Description",
Team
from your_table
整个选择是这样的

SELECT
"Description",
sum(case when "Team" = 'Team1' then 1 ELSE 0 END) as "Team1",
sum(case when "Team" = 'Team2' then 1 ELSE 0 END) as "Team2",
FROM
(
  select 
  case when "Description" like '%Missing Gender%' then "Missing_gender" 
  ELSE case when "Description" like '%Missing Name%' then "Missing_name" ELSE null END
  END as "Description",
  Team
  from your_table
)
GROUP BY "Description"

谢谢-这很有道理。然而,当我运行查询时,它并没有返回所有的“描述”类别,计数也不完全正确。我认为当在内部查询中使用case时,它只是标识“Description”中的第一个错误——因此,如果一个ID有两个错误,那么上面的查询将只标识该查询中的第一个错误(希望这是有意义的!)。我已经发布了上述查询的缩写版本。