标签: pivot

返回所有非 NULL 值都相等的行

是否有一个更简单的 T-SQL 构造“所有这些列在一行上都相等(忽略 NULL)” - 我想说有效:

WHERE MIN(a, b, c) = MAX(a, b, c) OR COALESCE(a, b, c) IS NULL
Run Code Online (Sandbox Code Playgroud)
  • 这将相当于所有排列的 COALESCE 相等 - 但没有非聚合 MIN/MAX 函数

3 列的替代方法是:

WHERE ( 
COALESCE(a, b, c) = COALESCE(b, c, a) 
AND COALESCE(a, b, c) = COALESCE(c, a, b) 
AND COALESCE(a, b, c) = COALESCE(b, a, c) 
AND COALESCE(a, b, c) = COALESCE(a, c, b) 
AND COALESCE(a, b, c) = COALESCE(c, b, a) 
) 
OR COALESCE(a, b, c) IS NULL
Run Code Online (Sandbox Code Playgroud)

即“所有非空列 a、b、c 必须相等,否则所有列都可能为空” …

sql-server pivot t-sql

7
推荐指数
3
解决办法
2078
查看次数

我可以用零替换 PIVOT 中的空值吗?

我在 Oracle 中使用 PIVOT 函数并且很好奇是否可以用零替换空值?我知道我可以将整个查询包装在另一个 SELECT 中,然后对值使用 COALESCE,但我很好奇是否有快捷方式。

oracle-11g-r2 pivot

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

使用数据透视表创建矩阵视图的 MySQL 查询

我有一个包含以下字段的表:

p1
p2
s1
s2
Run Code Online (Sandbox Code Playgroud)

其中 p1 -> player1, p2 -> player2, s1 -> game1, s2 -> game2 玩家的数量可以从 3 - 10 不等。表中有他们之间的结果。例如,假设我们有 4 名球员:TIM、ROB、NICK、GEORGE 以及他们之间的比赛:

    p1     p2       s1  s2
    TIM    ROB      4   0
    NICK   GEORGE   4   0
    TIM    NICK     0   4
    ROB    GEORGE   4   0
    TIM    GEORGE   4   0
    ROB    NICK     4   0
Run Code Online (Sandbox Code Playgroud)

我想用查询产生的东西是这样的:

           TIM   ROB   NICK   GEORGE
    TIM     X    4-0   0-4     4-0
    ROB    0-4    X    4-0     4-0
    NICK   0-4   4-0    X      4-0
    GEORGE 0-4   0-4   0-4      X
Run Code Online (Sandbox Code Playgroud)

在 …

mysql pivot

7
推荐指数
1
解决办法
2676
查看次数

如何在 SQLite 中透视数据

我有一个表,其中包含文本数据,其中包含一堆不同语言的翻译。每个翻译都是针对特定标签的。

我需要生成一个数据透视表,以便快速获取缺少的内容。

记录的一个例子是

1, en, hello
1, fr, bonjour
1, es, hola
2, en, how are you
2, fr, 
3, es, come es stas
Run Code Online (Sandbox Code Playgroud)

尽管所有语言的翻译都应始终存在,但我不能 100% 确定情况确实如此。因此必须考虑缺失字段。

想要的结果是这样的

|ID|EN|FR|ES|
|1|hello|bonjour|hola|
|2|how are you| |come es stas|
Run Code Online (Sandbox Code Playgroud)

我面临的挑战是填充数据库时列顺序可能并不总是相同,因此理论上我应该有一个动态字段列表。

SQLite 中没有直接的 PIVOT 函数,因此我开始尝试使用 group_concat 获取逗号分隔的字符串。

SELECT DISTINCT language, group_concat(word, ',') OVER (PARTITION BY language) AS group_concat
FROM vocabulary;
Run Code Online (Sandbox Code Playgroud)

如果需要的话,我可以稍后在 Python 中运行结果;问题是任何缺失值都不会附加空项,从而将所有串联移动 n,从而使该解决方案无效。

我还尝试在选择谓词中使用过滤子句(尽管这意味着对列进行硬编码),但我未能成功。

关于如何实现这一目标有什么想法吗?

sqlite pivot

7
推荐指数
1
解决办法
8909
查看次数

将二维数组从 n 行转置为 2 列

背景

使用 PostgreSQL 9.1,所以WITH ORDINAL(9.4 特性)不可用。

问题

希望简化旋转二维数组的代码。

代码

一个说明问题的工作,过于冗长的例子是:

SELECT
  u.aspect,
  u.preference
FROM (
  SELECT
    t.aspect_preference AS aspect,
    -- Skip every second row
    seq % 2 AS seq,
    lead( aspect_preference, 1 ) OVER (ORDER BY t.seq) AS preference
  FROM (
    SELECT
      unnest( '{ {"COLOUR_SCHEME", "RASPBERRY_BLISS"}, {"FONT", "TERMES_HEROS"}, {"LIST_LAYOUT", "BULLET_SNOWFLAKE"} }'::text[] ) aspect_preference,
      -- Maintain array order after unnesting to a result set
      generate_series( 1,
       (array_ndims( '{ {"COLOUR_SCHEME", "RASPBERRY_BLISS"}, {"FONT", "TERMES_HEROS"}, {"LIST_LAYOUT", "BULLET_SNOWFLAKE"} }'::text[] ) *
        array_length( '{ …
Run Code Online (Sandbox Code Playgroud)

postgresql pivot array

6
推荐指数
1
解决办法
5853
查看次数

QUERY - 透视多列,可变行数

我有一张看起来像这样的表:

RECIPE     VERSION_ID     INGREDIENT    PERCENTAGE
4000       100            Ing_1          23,0
4000       100            Ing_100         0,1
4000       200            Ing_1          20,0
4000       200            Ing_100         0,7
4000       300            Ing_1          22,3
4000       300            Ing_100         0,9
4001       900            Ing_1           8,3
4001       900            Ing_100        72,4
4001       901            Ing_1           9,3
4001       901            Ing_100        70,5
5012       871            Ing_1          45,1
5012       871            Ing_100         0,9
5012       877            Ing_1          47,2
5012       877            Ing_100         0,8
5012       879            Ing_1          46,6
5012       879            Ing_100         0,9
5012       880            Ing_1          43,6
5012       880            Ing_100         1,2
Run Code Online (Sandbox Code Playgroud)

每个配方/版本有 100 种成分。我想像这样显示这个表中的数据: …

sql-server pivot sql-server-2008-r2

6
推荐指数
1
解决办法
5万
查看次数

将多行数据插入多列

经过多次搜索,我找不到如何做到这一点。

我的网络搜索得到 Pivots 和 Concats 以及 Cases 和 Subqueries 等,但没有一个能很好地解决我的问题。多行到单行的问题对我没有帮助。

问题:

一张桌子上有个人。另一个表中有这些个人的地址(有时是多个)。我需要一个查询来将每个个人的多个地址放在一行(在适当的列中)。

这是一个带有表和查询的 MySQL Fiddle:

在那个 SQL Fiddle 中,结果有 6 个独特个体的 9 条记录:

Number  | Name              | EyeColor  | HairColor | Street                | City      | State     | Zip   | Street2   | City2 | State2| Zip2  | Street3   | ...
1       | John Smith        | blue      | red       | 100 Pine Street       | New York  | NY        | 10019 |           |       |       | 0     |           | ...
2 …
Run Code Online (Sandbox Code Playgroud)

mysql pivot

6
推荐指数
1
解决办法
2200
查看次数

将行转换为包含列名的串联字符串

我有一张几百列宽的桌子。有没有办法将每一行转换为包含列标题的单个串联字符串,而不必列出查询中的每一列?

我这样做是因为列代表事件报告中的字段。我将它们重新组合在一起,以便人们可以以合乎逻辑的方式阅读报告。

我已经通过查询完成了其中的一些工作,但是为每一列都做起来很费力,而且似乎容易出错。

这是一个简短的片段,显示以我需要的格式连接的三列,在逐列方法中完成:

SELECT 
 Concat( 
   IIf(Id IS NULL, Null, Concat('Id: ' , [Id] , '\n') )  , 
   IIf(StandardClientId IS NULL, Null, 
     Concat('StandardClientId: ' , [StandardClientId] , '\n') )  , 
   IIf(ClientName IS NULL, Null, 
     Concat('ClientName: ' , [ClientName] , '\n') ) 
 )  AS ReportLine
FROM dbo.DataDecoded; 
Run Code Online (Sandbox Code Playgroud)

谢谢

sql-server pivot

6
推荐指数
3
解决办法
2480
查看次数

总和案例当条款

我有以下查询,我希望老化配置文件显示为新列我的老化配置文件为 0-30、31-60、61-90、91-120、121-180、181-365、365+

我基本上希望结果出现在网络到期时出现在适当的老化支架中。

BU   0-30   31-60   61-90   91-120   121-180   181-365   365+
--------------------------------------------------------------
A    
B
C
Run Code Online (Sandbox Code Playgroud)

询问:

select
 BU,
 Ageing,
 sum(NetDue) as Netdue
 from [dbo].[vw_FACT_CONSOL_CREDITORS]
 where date = @date
 Group by BU, Ageing
Order by BU ;
Run Code Online (Sandbox Code Playgroud)

我是 SQL 的新手,只是想学习所以很抱歉,因为这是基本的东西谢谢

sql-server pivot case sql-server-2014 sum

6
推荐指数
1
解决办法
845
查看次数

如何在 T-SQL 中透视

我有一个我无法解决的问题。

我的查询是:

SELECT
    f.Title, p.StartOfShowing
FROM  
    PlayDates p 
INNER JOIN 
    PlayDateSections ps ON p.PlayDateId = ps.PlayDateId
INNER JOIN 
    Films f ON p.FilmId = f.FilmId
WHERE  
    DATEDIFF(d, p.StartOfShowing, '2018-04-30') = 0
Run Code Online (Sandbox Code Playgroud)

表的结果是这样的:

A Quiet Place                      2018-04-30 12:40
A Quiet Place                      2018-04-30 15:05
A Quiet Place                      2018-04-30 17:30
A Quiet Place                      2018-04-30 19:55
A Quiet Place                      2018-04-30 22:20
Avengers : Infinity War            2018-04-30 11:10
Avengers : Infinity War            2018-04-30 11:30
Avengers : Infinity War            2018-04-30 12:00
Avengers : Infinity War            2018-04-30 13:00 …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot t-sql

6
推荐指数
1
解决办法
543
查看次数