试图找到一些简单的SQL Server PIVOT示例。 我发现的大多数示例都涉及对数字进行计数或求和。 我只想透视一些字符串数据。 例如,我有一个查询,返回以下内容。

Action1 VIEW  
Action1 EDIT  
Action2 VIEW  
Action3 VIEW  
Action3 EDIT  

我想使用PIVOT(如果可能的话)使结果如下所示:

Action1 VIEW EDIT  
Action2 VIEW NULL  
Action3 VIEW EDIT  

使用PIVOT功能甚至可能吗?

===============>>#1 票数:164 已采纳

请记住,MAX聚合函数将同时适用于文本和数字。 此查询将只需要扫描表一次。

SELECT Action,
       MAX( CASE data WHEN 'View' THEN data ELSE '' END ) ViewCol, 
       MAX( CASE data WHEN 'Edit' THEN data ELSE '' END ) EditCol
 FROM t
 GROUP BY Action

===============>>#2 票数:53

表格设定:

CREATE TABLE dbo.tbl (
    action VARCHAR(20) NOT NULL,
    view_edit VARCHAR(20) NOT NULL
);

INSERT INTO dbo.tbl (action, view_edit)
VALUES ('Action1', 'VIEW'),
       ('Action1', 'EDIT'),
       ('Action2', 'VIEW'),
       ('Action3', 'VIEW'),
       ('Action3', 'EDIT');

您的表: SELECT action, view_edit FROM dbo.tbl

你的桌子

不使用PIVOT进行查询:

SELECT Action, 
[View] = (Select view_edit FROM tbl WHERE t.action = action and view_edit = 'VIEW'),
[Edit] = (Select view_edit FROM tbl WHERE t.action = action and view_edit = 'EDIT')
FROM tbl t
GROUP BY Action

使用PIVOT查询:

SELECT [Action], [View], [Edit] FROM
(SELECT [Action], view_edit FROM tbl) AS t1 
PIVOT (MAX(view_edit) FOR view_edit IN ([View], [Edit]) ) AS t2

这两个查询均得出:
在此处输入图片说明

===============>>#3 票数:52

如果您特别想使用SQL Server PIVOT函数,那么这应该起作用,假定您的两个原始列分别称为act和cmd。 (虽然看起来不太漂亮。)

SELECT act AS 'Action', [View] as 'View', [Edit] as 'Edit'
FROM (
    SELECT act, cmd FROM data
) AS src
PIVOT (
    MAX(cmd) FOR cmd IN ([View], [Edit])
) AS pvt

===============>>#4 票数:7

http://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/

SELECT CUST, PRODUCT, QTY
FROM Product) up
PIVOT
( SUM(QTY) FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)) AS pvt) p
UNPIVOT
(QTY FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)
) AS Unpvt
GO

===============>>#5 票数:6

好吧,对于您的示例以及任何数量有限的唯一列,都应该这样做。

select 
    distinct a,
    (select distinct t2.b  from t t2  where t1.a=t2.a and t2.b='VIEW'),
    (select distinct t2.b from t t2  where t1.a=t2.a and t2.b='EDIT')
from t t1

===============>>#6 票数:5

With pivot_data as
(
select 
action, -- grouping column
view_edit -- spreading column
from tbl
)
select action, [view], [edit]
from   pivot_data
pivot  ( max(view_edit) for view_edit in ([view], [edit]) ) as p;

===============>>#7 票数:1

您可以将其用于透视:

With pivot_data as
(
select 
action, -- grouping column
view_edit -- spreading column
from tbl
)
select action, [view], [edit]
from   pivot_data
pivot  ( max(view_edit) for view_edit in ([view], [edit]) ) as p;

===============>>#8 票数:0

我遇到的情况是我正在解析字符串,而该字符串的前两个位置将是医疗保健索赔编码标准的字段名称。 因此,我将删除字符串并获取F4,UR和UQ或其他值。 对于一个用户来说,一个记录或几条记录就​​很棒。 但是,当我想查看数百条记录和所有用户的值时,它必须是PIVOT。 特别是对于导出大量记录以达到卓越效果而言,这真是太好了。 我收到的具体报告要求是“每次有人向Benadryl提出索赔时,他们在F4,UR和UQ字段中提交了什么值。我有一个外部应用程序,该应用程序创建了ColTitle,下面的值字段

PIVOT(
  min(value)
  FOR ColTitle in([F4], [UR], [UQ])
 )

  ask by Tim Cochran translate from so

未解决问题?本站智能推荐:

2回复

动态数据透视+ SQL Server 2005中的问题

我有个问题。 实际上,在我们的应用程序中,较早的客户被允许每月支付3安装费,但现在可以为任何数量。 所以我有较早的查询 输出是这个 但是正如我说的那样,现在分期付款可能会有所不同(例如,在1个月内可以是4,而在下个月可以是5或3或6),那么在这种情况下如何进行动态列透视?
1回复

SQL Server透视查询

我有数据集 我想将结果格式化为 在SQL Server透视中是否可能?
2回复

透视SQL Server表

SQL Server表中的示例数据如下所示: 上面显示了两对(4行)。 每对中的所有字段都是相同的(即使数据未排序 - 尽管它在上面排序),除了Head和D_C Column ,对于该对不同。 我正在从上面的示例中寻找以下报告: 这是报告中的一行,其中Head + D组合
1回复

如何与SQL Server中的FOR XML PATH一起进行数据透视?

我有一个输入 输出: 我正在寻找输出 这意味着,由于我们正在寻找学生的第三高分,因此,哪个学生获得了第三高分,都应该进入最终的期望列表。 如果学生A和C(说)在科目1之间并列平分,而学生C在学科3(说)中获得第三高分,那么输出将是 第二个的DDL如下
2回复

SQL Pivot字符串数据

我在SQL Server中有一个表:Product 产品表 : 这是我需要的输出: ImageID最多可以有3个ProductID所有ImageID都没有必要拥有3个产品[例如。 图像标识= 3]
4回复

SQL Server对具有字符串值的行求和

我有一个动态SQL查询,该查询返回带有字符串值和数字值的以下行。 现在,我需要一个新列,将col1与col5相加,并创建一个total sum列,该列应忽略第3行中的字符串值。没有NULL值 我怎样才能做到这一点? 使用ISNUMERIC可能是解决方案,但是我不确定如何在这种情况
1回复

需要在SQL Server中透视字符串值

我把桌子描述为: 有价值: 我需要在数据格式中的值为: 任何人都可以帮忙吗? 提前致谢
2回复

动态转置/透视SQL数据

很抱歉提出这个问题,因为这个主题有很多,但是由于我正在处理更多的问题,我一直在围绕通用的Pivot问题进行很多研究,但没有找到解决方案,因此我无法绕开我的头。 为了确定机组人员一起比赛时的“经验”(这是我必须处理的最简单的例证),我需要针对给定的比赛找出以前的比赛中有哪些机组人员参加过-用户友
3回复

SQL Server 2005-在没有求和/计数和动态值列表的情况下透视数据

很抱歉,如果另一个问题在其他地方都涉及到此问题,但是我找不到任何与我的需求完全匹配的示例,这让我感到困惑。 我在表中有这样的数据: 我想要这样的数据... 我不想使用案例陈述,因为狗,猫,鱼等有20多种可能的值,并且它们可能会随着时间变化。 任何人都有指针吗?
1回复

在SQL Server中使用透视(错误) - 列名无效

在我的程序中,我创建了一个#temp临时表,我试图在多列中显示多行。 我使用pivot的原因是因为动态创建的代码和行数未知。 我正在运行代码,但它给出了错误。 我会发疯的。 找不到错误在哪里。 它表明在交叉应用中存在无效的列名。 我认为还有另一个错误。 它在错误的一面显示错误。