【问题标题】:Pivot Structure in SQLSQL 中的枢轴结构
【发布时间】:2013-07-29 12:21:29
【问题描述】:

我需要一个 sql 查询来填充关键结构中的数据,假设我有下表作为示例,我需要一个 SQL server 2008 中的查询

ID|EMAIL|Name|Region|Catergory
1|a@a.com|A|AMERICA|PP 
2|b@b.com|B|EMEA|CC 
3|c@c.com|C|APAC|PP 
4|d@d.com|D|APAC|DD 
5|E@c.com|E|EMEA|CC 
6|E@d.com|ED|UNKNOW|CC 

有什么办法可以得到下面的数据透视表, 以下是我希望从上表中得到的结果,

Category|AMERICAS|EMEA|APAC|UNKNOW 

PP|1|0|0|0 
CC|0|2|0 
DD|0|0|1|0 

【问题讨论】:

  • Please provide me a query 这句话让我觉得你没有以正确的态度接近这个网站。
  • thmsbendataclear,我已删除...

标签: sql sql-server sql-server-2008 pivot


【解决方案1】:
SELECT *
FROM
(
  SELECT id, Catergory, region
  FROM table1
) AS t
PIVOT
(
  COUNT(ID)
  FOR Region IN([AMERICAS],
                [EMEA],
                [APAC],
                [UNKNOW])
) AS p;

DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);


select @cols = STUFF((SELECT distinct ',' +
                        QUOTENAME(Region)
                      FROM table1
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)') 
                        , 1, 1, '');

SELECT @query = 'SELECT *
FROM
(
  SELECT id, Catergory, region
  FROM table1
) AS t
PIVOT
(
  COUNT(ID)
  FOR Region IN(' + @cols + ')) AS p;';

execute(@query);

【讨论】:

  • @MahmoudGamal 非常感谢... :)
【解决方案2】:

试试这个 -

DECLARE @temp TABLE
(
     ID INT, 
     Name CHAR(2), 
     Region VARCHAR(10), 
     Catergory CHAR(2)
)

INSERT INTO @temp (ID, Name, Region, Catergory)
VALUES 
     (1, 'A', 'AMERICA', 'PP'), 
     (2, 'B', 'EMEA', 'CC'), 
     (3, 'C', 'APAC', 'PP'), 
     (4, 'D', 'APAC', 'DD'), 
     (5, 'E', 'EMEA', 'CC'), 
     (6, 'ED', 'UNKNOW', 'CC')

SELECT *
FROM (
     SELECT Name, Region, Catergory 
     FROM @temp
) src
PIVOT (
     COUNT(Name) 
     FOR Region IN (AMERICAS, EMEA, APAC, UNKNOW)
) pvt

输出 -

Catergory AMERICAS    EMEA        APAC        UNKNOW
--------- ----------- ----------- ----------- -----------
CC        0           2           0           1
DD        0           0           1           0
PP        0           0           1           0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2020-07-22
    • 2013-05-01
    相关资源
    最近更新 更多