标签: pivot

将行转为多列

我有一个 SQL Server 实例,它具有到 Oracle 服务器的链接服务器。Oracle 服务器上有一个名为的表,PersonOptions其中包含以下数据:

???????????????????????
? PersonID ? OptionID ?
???????????????????????
?        1 ? A        ?
?        1 ? B        ?
?        2 ? C        ?
?        3 ? B        ?
?        4 ? A        ?
?        4 ? C        ?
???????????????????????
Run Code Online (Sandbox Code Playgroud)

我需要对这些数据进行透视,因此结果是:

????????????????????????????????????????????
? PersonID ? OptionA ? Option B ? Option C ?
????????????????????????????????????????????
?        1 ?       1 ?        1 ?          ?
?        2 ?         ?          ?        1 ?
?        3 ?         ? …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g pivot linked-server

22
推荐指数
3
解决办法
8万
查看次数

如何在生成的表定义未知的情况下生成旋转的 CROSS JOIN?

给定两个带有名称和值的未定义行数的表,我将如何显示CROSS JOIN函数对其值的透视。

CREATE TEMP TABLE foo AS
SELECT x::text AS name, x::int
FROM generate_series(1,10) AS t(x);

CREATE TEMP TABLE bar AS
SELECT x::text AS name, x::int
FROM generate_series(1,5) AS t(x);
Run Code Online (Sandbox Code Playgroud)

例如,如果该函数是乘法,我将如何生成如下所示的(乘法)表,

1..12的常用乘法表

所有这些(arg1,arg2,result)行都可以用

SELECT foo.name AS arg1, bar.name AS arg2, foo.x*bar.x AS result
FROM foo
CROSS JOIN bar; 
Run Code Online (Sandbox Code Playgroud)

所以这只是一个演示问题,我希望这也适用于自定义名称——该名称不仅仅是CAST文本的参数,而是设置在表格中,

CREATE TEMP TABLE foo AS
SELECT chr(x+64) AS name, x::int
FROM generate_series(1,10) AS t(x);

CREATE TEMP TABLE bar AS
SELECT …
Run Code Online (Sandbox Code Playgroud)

postgresql pivot dynamic-sql

19
推荐指数
2
解决办法
6629
查看次数

在维度中动态定义范围

每次我决定构建一个立方体时,我都会遇到一个问题,但我还没有找到克服它的方法。

问题是如何允许用户自动定义一系列事物,而无需在维度中对它们进行硬编码。我将在一个例子中解释我的问题。

我有一个叫做客户的表:

表结构

这是表中的数据:

数据表

我想以枢轴样式显示数据,并将工资年龄分组在定义的范围内,如下所示:

具有定义范围的数据表

我写了这个脚本并定义了范围:

SELECT [CustId]
      ,[CustName]
      ,[Age]
      ,[Salary]
      ,[SalaryRange] = case
        when cast(salary as float) <= 500 then
            '0 - 500'
        when cast(salary as float) between 501 and 1000 then
            '501 - 1000'
        when cast(salary as float) between 1001 and 2000 then
            '1001 - 2000'
        when cast(salary as float) > 2000 then
            '2001+'
        end,
        [AgeRange] = case
        when cast(age as float) < 15 then
            'below 15'
        when cast(age as float) between …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server ssas pivot

18
推荐指数
3
解决办法
1万
查看次数

如何获得同一表上不同列的计数

表#01 Status

StatusID    Status
-----------------------
 1          Opened
 2          Closed
 3          ReOpened
 4          Pending
Run Code Online (Sandbox Code Playgroud)

表#02 Claims

ClaimID     CompanyName StatusID
--------------------------------------
1               ABC     1
2               ABC     1
3               ABC     2
4               ABC     4
5               XYZ     1
6               XYZ     1
Run Code Online (Sandbox Code Playgroud)

预期结果:

CompanyName TotalOpenClaims TotalClosedClaims TotalReOpenedClaims TotalPendingClaims
--------------------------------------------------------------------------------
ABC                 2           1                      0               1
XYZ                 2           0                      0               0
Run Code Online (Sandbox Code Playgroud)

我需要如何编写查询才能按预期获得结果?

sql-server pivot

16
推荐指数
2
解决办法
8万
查看次数

为范围内的每个日期返回一列

假设我有表 A:BookingsPerPerson

Person_Id    ArrivalDate    DepartureDate
123456       2012-01-01     2012-01-04
213415       2012-01-02     2012-01-07
Run Code Online (Sandbox Code Playgroud)

我需要通过视图实现以下目标:

Person_Id    ArrivalDate    DepartureDate    Jan-01    Jan-02    Jan-03    Jan-04    Jan-05    Jan-06    Jan-07
123456       2012-01-01     2012-01-04       1         1         1         1
213415       2012-01-02     2012-01-07                 1         1         1         1         1         1
Run Code Online (Sandbox Code Playgroud)

该系统用于活动,因此每次酒店预订可能需要 1 到 15 天的时间,但不会超过此时间。任何想法将不胜感激。

sql-server-2008 sql-server pivot

15
推荐指数
2
解决办法
8万
查看次数

帮助 PIVOT 查询

我有一个具有以下结构的表:

CREATE TABLE [dbo].[AUDIT_SCHEMA_VERSION](
    [SCHEMA_VER_MAJOR] [int] NOT NULL,
    [SCHEMA_VER_MINOR] [int] NOT NULL,
    [SCHEMA_VER_SUB] [int] NOT NULL,
    [SCHEMA_VER_DATE] [datetime] NOT NULL,
    [SCHEMA_VER_REMARK] [varchar](250) NULL
);
Run Code Online (Sandbox Code Playgroud)

一些示例数据(似乎 sqlfiddle 有问题.. 所以放一些示例数据):

INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,7,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,10,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,12,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,12,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot t-sql sql-server-2008-r2

12
推荐指数
2
解决办法
764
查看次数

如何将行透视为列 MySQL

一直在寻找将行 (progress_check) 转换为列检查 1、检查 2 等......不需要总和或总数,只是希望显示结果......任何人都可以帮忙,谢谢广告

这是MYSQL中的表(成绩)

希望能得到这样的东西!

mysql pivot

12
推荐指数
2
解决办法
5万
查看次数

动态SQL(pivot查询)转换为xml输出时,为什么日期的第一位转换为unicode?

我正在使用Bluefeet 的这个很好的例子https://dba.stackexchange.com/a/25818/113298,来创建一个数据透视表并将其转换为 xml 数据。

声明参数

DECLARE @cols AS NVARCHAR(MAX),  @query  AS NVARCHAR(MAX);
Run Code Online (Sandbox Code Playgroud)

接下来有一个代码很多的CTE,CTE的最终结果放在一个临时数据库中(与示例中相同)

SELECT 
B.[StayDate] -- this is a date dd-mm-yyyy
, B.[Guid]
INTO #tempDates
FROM BaseSelection B
Run Code Online (Sandbox Code Playgroud)

生成 cols(与示例相同)

SELECT @cols = STUFF((SELECT distinct ',' +QUOTENAME(convert(char(10), [StayDate] , 120)) 
FROM #tempDates
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') 
,1,1,'');
Run Code Online (Sandbox Code Playgroud)

结果集是我应该期望的

set @query = 
   'SELECT [Guid],' + @cols +'
    FROM
    (
        SELECT 
            [StayDate] 
           ,[Guid]
        FROM #tempDates
    ) A
    pivot
    (
        count([StayDate])
        for [StayDate] in (' + @cols +')                    
    ) …
Run Code Online (Sandbox Code Playgroud)

xml sql-server pivot

11
推荐指数
2
解决办法
2983
查看次数

SUM(CASE) 或 CTE PIVOT 哪个更快?

有两种类型的方法来执行PIVOT. 在 SQL Server 2005PIVOT推出之前,大多数人都是这样做的:

SELECT RateID
              SUM(CASE WHEN RateItemTypeID = 1 THEN UnitPrice ELSE 0 END),
              SUM(CASE WHEN RateItemTypeID = 2 THEN UnitPrice ELSE 0 END),
              SUM(CASE WHEN RateItemTypeID = 3 THEN UnitPrice ELSE 0 END)
              FROM rate_item WHERE _WhereClause_
              GROUP BY RateID
Run Code Online (Sandbox Code Playgroud)

后来,当 2005 年推出时,PIVOT它变成了这样:

   SELECT RateID, [1], [2], [3]
          FROM PertinentRates -- PertinentRates is a CTE with WHERE clause applied
          PIVOT (SUM(UnitPrice) FOR RateItemTypeID IN ([1], [2], [3])) PVT)
Run Code Online (Sandbox Code Playgroud)

在 SQL …

performance sql-server pivot query-performance

10
推荐指数
4
解决办法
8628
查看次数

是否可以在 LIKE 语句上进行 PIVOT

是否可以按表中的元素(如COLUMN LIKE='Value%')进行分组PIVOT?我有一个表 [DBT].[Status],其中包含各种状态(数据库、实例等),并且不想将所有 PROD 和 TEST 值作为单个值进行透视/查询,而是将它们分组。

例如代替具有用于状态列ProdProd ACCProd APP,...等。我将仅有一个包含的值列Name LIKE 'Prod%'Name LIKE 'Test%'

到目前为止我所拥有的:

表定义

CREATE TABLE [DBT].[Status](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Status] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY],
 CONSTRAINT [IX_Status] UNIQUE NONCLUSTERED 
(
    [Name] ASC
)WITH (PAD_INDEX …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot sql-server-2014

10
推荐指数
2
解决办法
851
查看次数