AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[unpivot](dba)

Martin Hope
abbhey
Asked: 2018-11-16 16:50:52 +0800 CST

取消透视多个相似的列

  • 2

我正在尝试规范化一些表格。这是我的一张桌子

 SalesID|Order1Name|Order1Date|Order1Amt|Order2Name|Order2Date|Order2Amt|Order3Name......Order10xxxx
 ---------------------------------------------------------------------------
1001     | first   | 1/1/18   | 111.00  |  second  | 2/1/18   | 222.00

我想得到它

SalesID |OrderNum  |  OrderName  |  OrderDate  |  OrderAmt|
------------------------------------------------------------
 1001      1          first          1/1/18         111.00
 1001      2          second         2/1/18         222.00
 1001      .
 1001      . 
 1001      10

我一直在尝试使用 unpivot 运行 - 如何确保我有序数(column2)信息?

sql-server unpivot
  • 2 个回答
  • 10486 Views
Martin Hope
alish
Asked: 2018-10-24 01:14:37 +0800 CST

将 2 列反转为一列

  • 1

我有这样的表:

ID|ServiceName|ServiceCode|Age      |Gender|Number|TotalCost|Location
0 | service1  |  0000234  |under 12 | Male | 121  |1234     |loc1

我想像这样更改表格:

ID|ServiceName|ServiceCode|Age      |Gender|Measure    |Value |Location
0 | service1  |  0000234  |under 12 | Male | Number    |121     |loc1
1 | service1  |  0000234  |under 12 | Male | TotalCost |1234    |loc1

我怎样才能做到这一点?

sql-server unpivot
  • 2 个回答
  • 500 Views
Martin Hope
MTH
Asked: 2018-10-19 04:34:24 +0800 CST

Unpivot 避免空列上的笛卡尔积

  • 0

我对 UNPIVOT 有疑问。

最初的情况是我收到一些列数固定的文件,我必须像这样将它们导入我的数据库。这意味着我的表有例如 10 个部门列:departement_1、department_2、departement_3、...

基于这些数据,我需要创建一些只有 1 列的视图,因为我受限于要导入数据的软件。

这是我做的一个视图:

SELECT reference, libelle, date_naissance, pays_naissance, nationalite, 
    pays_fiscal, nif, us_tin, us_person, type_activite, etat_civil, rac, 
    pep, departement, etat_individu, relation
FROM S2i_individu
LEFT JOIN relation_individu 
    ON S2i_individu.reference = relation_individu.individu
UNPIVOT (
    pays_fiscal FOR t1 IN (pays_fiscal_1, pays_fiscal_2, pays_fiscal_3)
) UNPIV
UNPIVOT (
    nif FOR t2 IN (nif_1, nif_2, nif_3)
) UNPIV
UNPIVOT (
departement for t3 in (departement_1, departement_2, departement_3, departement_4, departement_5, departement_6, departement_7, departement_8, departement_9, departement_10)
) UNPIV
WHERE import_id = (SELECT TOP(1) id FROM import ORDER BY import_date DESC)

我的问题是,根据 UNPIVOT 的性质,结果是 departement、nif 和 pays_fiscal 的笛卡尔积。这意味着对于 S2i_individu 中的每个条目,我将始终有 90 行。

如果没有数据,有人知道限制为 1 行的方法吗?就像如果我没有 pays_fiscal、nif 和 departement 的任何数据,我的结果中仍然只有一行吗?

sql-server unpivot
  • 1 个回答
  • 236 Views
Martin Hope
Farhaan Patel
Asked: 2018-05-22 00:57:49 +0800 CST

sql中如何在另一个表的单列中插入多列

  • -1

我有下表:

在此处输入图像描述

然后我想得到以下内容:

在此处输入图像描述

我想在 postgres 中实现这一点。我应该怎么办?

postgresql unpivot
  • 1 个回答
  • 1416 Views
Martin Hope
roffster
Asked: 2018-02-21 19:52:12 +0800 CST

将 50 多个列表转换为 1 个小得多的表

  • 2

我目前正在处理一个遗留的 PLC 设备,它在一个烦人的 MYSQL 表中吐出数据。表结构为:

PK | FK | FK | FK | Result1 | Result2 | ... | ResultN

可以想象,对此执行任何类型的查询或连接都非常麻烦,并且需要很长时间才能解决。

我想设置一个自动 select -> insert 语句来提取数据并将其放入更合适的表中

PK | FK | FK | FK | Result Number | Result Value

不幸的是,我一直在研究如何提取列名,以便我知道用什么填充Result Number列,以及如何跨表交叉乘法以确保每个新行都具有每个值所需的所有键。

mysql unpivot
  • 4 个回答
  • 279 Views
Martin Hope
Juan Velez
Asked: 2017-02-10 13:50:43 +0800 CST

双反透视?

  • 7

我需要取消透视下表,以便输出如下图所示。

在此处输入图像描述

这是否需要我在数据集上执行两次 UNPIVOT,或者我可以通过使用 UNPIVOT 一次并指定所有可用的月份和值列来完成我的预期输出?

我的脚本应该类似于以下内容来完成我需要的吗?

 Select ID, Name, Age, Gender,Month,Value
    FROM
    (Select ID, Name, Age, Gender,Month1,Month2,Month3,Month4,Value1,Value2,Value3,Value4
    FROM MyTable
    ) as cp
    UNPIVOT 
    (
      Month FOR Months IN (Month1, Month2, Month3,Month4),
      Value for Values IN (Value1,Value2,Value3,Value4)
    ) AS up;
sql-server unpivot
  • 1 个回答
  • 3663 Views
Martin Hope
Muflix
Asked: 2016-12-18 10:06:40 +0800 CST

基于选择的逆透视列

  • 2

可以执行 Unpivot 操作,其中列名通过 select 完成,而不使用动态 SQL?

我试过了,但失败了。

SELECT *
FROM [dbo].[Report]
UNPIVOT
(
  Value
  FOR WeekName IN 
  (
      SELECT COLUMN_NAME FROM information_schema.columns c
      WHERE c.TABLE_NAME = 'Report'
      AND ORDINAL_POSITION > 1
      ORDER BY ORDINAL_POSITION
  )
) u
sql-server-2008 unpivot
  • 1 个回答
  • 805 Views
Martin Hope
Test User
Asked: 2015-10-15 00:56:44 +0800 CST

在未透视列中包含空值

  • 5

考虑下表:

id  title   genre1  genre2  genre3  genre4  genre5
1   Movie1  Thriller    Crime   NULL    NULL    NULL
2   Movie2  Fantasy NULL    NULL    NULL    NULL
3   Movie3  Political   Philosophical   Historical  NULL    NULL
4   Movie4  Science Fiction NULL    NULL    NULL    NULL

当我取消透视流派1、流派2、...时,NULL 值被删除,例如,Movie1 的行将是:

id title  genre     original_column
1  Movie1 Thriller  genre1
1  Movie1 Crime     genre2

有没有办法包含 NULL 值,例如:

id title  genre     original_column
1  Movie1 Thriller  genre1
1  Movie1 Crime     genre2
1  Movie1 NULL      genre3
1  Movie1 NULL      genre4
1  Movie1 NULL      genre5

我可以SELECT ISNULL(genre1, '*'), ISNULL(genre2, '*') ...,但假设我希望这些值显示为 NULL?有没有比以下更好的方法:

WITH 
-- SELECT that unpivots table
AS unpivoted
SELECT unpivoted.id, 
  unpivoted.title, 
  ,CASE unpivoted.genre WHEN '*' THEN NULL ELSE unpivoted.genre END 
  ,unpivoted.original_transaction
FROM unpivoted

另外,我注意到返回要取消透视的源数据的查询必须有一个别名。例如:

SELECT ... FROM
  -- *must* give it an alias or it's a syntax error
  (SELECT ... FROM) AS source 
  UNPIVOT(genre for original_column IN (genre1,genre2, genre3,genre4,genre5))

有谁知道为什么?我还没有找到在查询中的任何地方引用别名的方法。

t-sql unpivot
  • 1 个回答
  • 4444 Views
Martin Hope
NaNerd
Asked: 2015-02-07 02:02:26 +0800 CST

将结果行拆分为多行

  • 1

我有以下查询:

SELECT
       vs.MonthName AS Month, 
       vs.Region, 
       vs.Category, 
       CAST (MIN (a.TotalAmount) AS money) AS ActualAmount, 
       MIN (a.TotalCases) AS ActualCases, 
       CAST (MIN (ve.BudgetAmount) AS money) AS BudgetAmount,
      MIN (ve.BudgetCases) AS BudgetCases
FROM
    dbo.VarianceSetup AS vs
    LEFT OUTER JOIN dbo.Actuals 
       AS a ON vs.MonthNum=a.Month
                AND vs.RegionId=a.SalesRegionId
                AND vs.CategoryId=a.ProductCategoryId
                AND a.Year=2015
    LEFT OUTER JOIN dbo.VarianceReportEntries 
       AS ve ON a.Month=ve.Month
             AND a.SalesRegionId=ve.SalesRegionId
             AND a.ProductCategoryId=ve.ProductCategoryId
             AND ve.Year=2015
GROUP BY
        vs.MonthName, 
        vs.Region, 
        vs.Category;

这给了我以下输出。

+---------+-------------+----------+--------------+-------------+-------------+--------------+
|  Month  |   Region    | Category | ActualAmount | ActualCases | BudgetCases | BudgetAmount |
+---------+-------------+----------+--------------+-------------+-------------+--------------+
| January | New England | Cola     | 439365.6000  | 31200       | 0           | 0.0000       |
| January | New England | Juice    | 110051.7600  | 8424        | 0           | 0.0000       |
| January | New England | Water    | 800.0000     | 40          | 0           | 0.0000       |
| January | NY / NJ     | Cola     | 552583.0800  | 40692       | 0           | 0.0000       |
| January | NY / NJ     | Juice    | 139824.3600  | 10764       | 0           | 0.0000       |
| January | NY / NJ     | Water    | NULL         | NULL        | NULL        | NULL         |
+---------+-------------+----------+--------------+-------------+-------------+--------------+

但是对于我正在处理的一些代码,我需要将每一行分成四行并添加一个字符串标识符来指示行的类型,如下所示:

+---------+-------------+----------+--------------+-------------+
|  Month  |   Region    | Category |     Type     |    Value    |
+---------+-------------+----------+--------------+-------------+
| January | New England | Cola     | ActualAmount | 439365.6000 |
| January | New England | Cola     | ActualCases  | 31200       |
| January | New England | Cola     | BudgetAmount | 0.0000      |
| January | New England | Cola     | BudgetCases  | 0           |
| January | New England | Juice    | ActualAmount | 110051.7600 |
| January | New England | Juice    | ActualCases  | 8424        |
| January | New England | Juice    | BudgetAmount | 0.0000      |
| January | New England | Juice    | BudgetCases  | 0           |
+---------+-------------+----------+--------------+-------------+

我怎样才能通过调整我的查询来实现这一点——或者通过基于这个查询的视图创建一个查询?

sql-server unpivot
  • 2 个回答
  • 8929 Views
Martin Hope
Andrew
Asked: 2014-07-17 16:06:38 +0800 CST

为什么 UNPIVOT 在兼容级别 80 数据库上工作?

  • 8

我正在尝试在以兼容级别 80 运行的 SQL Server 2008 SP3 数据库上使用 UNPIVOT 提取数据。这应该意味着 UNPIVOT 不起作用,但在我的情况下,它在某些情况下会起作用......

作品:

形式的独立SELECT查询:

SELECT...FROM...UNPIVOT...WHERE...GROUP BY

不起作用:

相同的查询,在LEFT JOIN ()同一服务器内不同数据库上的其他表上。都在兼容级别 80。

我收到通常的错误消息:

Msg 325, Level 15, State 1, Line 165
Incorrect syntax near 'UNPIVOT'. You may need to set the compatibility level
of the current database to a higher value to enable this feature. See help for
the SET COMPATIBILITY_LEVEL option of ALTER DATABASE.

UNPIVOT变通办法似乎很麻烦,如果可能的话,我希望这个查询是独立的和可刷新的。如果我可以让查询单独工作,这似乎是合乎逻辑的,它应该可以在JOIN.

问题:

为什么这有时会起作用?

在这些条件下如何实现UNPIVOT里面的子查询?JOIN

Unpivot 子查询:(根据请求...)

SELECT 
    YEAR(CAST('1-'+UnPiv.[Date] AS DATE)) "Year",
    MONTH(CAST('1-'+UnPiv.[Date] AS DATE)) "Month",
    CASE [Channel_Org]
        WHEN 'TPR' THEN 'ERP'
        ELSE [Channel_Org]
    END AS [Channel_Org],
    ISNULL(SUM(CASE WHEN [GL Desc] = 'EIP' AND 
        [OPEX_Group] = 'Postpaid SAC' THEN [Amount] END),0) "Post EIP",
    ISNULL(SUM(CASE WHEN [GL Desc] = 'EIP' AND
        [OPEX_Group] = 'Prepaid SAC' THEN [Amount] END),0) "Pre EIP",
    ISNULL(SUM(CASE WHEN [GL Desc] = 'EIP' AND
        [OPEX_Group] = 'SRC' THEN [Amount] END),0) "Upg EIP",
    ISNULL(SUM(CASE WHEN [GL Desc] = 'MDF (OEM)' AND
        [OPEX_Group] = 'Postpaid SAC' THEN [Amount] END),0) "Post MDF",
    ISNULL(SUM(CASE WHEN [GL Desc] = 'MDF (OEM)' AND
        [OPEX_Group] = 'Prepaid SAC' THEN [Amount] END),0) "Pre MDF",
    ISNULL(SUM(CASE WHEN [GL Desc] = 'MDF (OEM)' AND
        [OPEX_Group] = 'SRC' THEN [Amount] END),0) "Upg MDF"
FROM [Channel_Steering].[dbo].[AQ1_OPEX_View]
UNPIVOT (Amount FOR [Date] IN ( [Jan-14],
                                [Feb-14],
                                [Mar-14],
                                [Apr-14],
                                [May-14],
                                [Jun-14],
                                [Jul-14],
                                [Aug-14],
                                [Sep-14],
                                [Oct-14],
                                [Nov-14],
                                [Dec-14])) UnPiv
WHERE   (   [Channel_Org] IN ('Retail','TPR')
                AND
            [GL Desc] IN ('MDF (OEM)', 'EIP')
        )
GROUP BY
    [Channel_Org],
    YEAR(CAST('1-'+UnPiv.[Date] AS DATE)),
    MONTH(CAST('1-'+UnPiv.[Date] AS DATE))
sql-server unpivot
  • 1 个回答
  • 2119 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve