当前位置: 首页 > 面试题库 >

Row_Number()需要动态枢轴

公西翊歌
2023-03-14
问题内容

我正在使用Microsoft SQL Server Management Studio 2008。

我有看起来像这样的数据:

Client ID        Value
-------------------------------
12345            Did Not Meet
12345            Did Not Meet
12345            Partially Met
12346            Partially Met
12346            Partially Met
12346            Partially Met
12347            Partially Met
12347            Partially Met
12347            Did Not Meet
12347            Met

我希望结果显示如下:

Client ID                Value1                Value2                   Value3                      Value4

12345                    Did Not Meet           Did Not Meet            Partially Met                NULL
12346                    Partially Met          Partially Met           Partially Met                NULL
12347                    Partially Met          Partially Met           Did Not Meet                 Met

这些列是未知的,所以我知道我需要一个动态查询。我已经尝试过使用数据透视功能进行动态查询,但只在相同类型的值下进行分组。所以聚合函数对我不利。

这是我尝试过的查询:

Declare @Columns nvarchar(max); 
Declare @DynamicPivotQuery nvarchar(max);

Select @Columns=    
COALESCE(@Columns+',','')+QUOTENAME(Value)  
from (select distinct Document.Value
from Document d 
join Client c on d.clientid=c.id    
    )
 as t1


Set @DynamicPivotQuery= 
 N'Select ClientID, ' + @Columns + '    
 from   
 (select Document.ClientID, 
  DocumentFact.Value,   
   from Document d
   join Client c on d.clientid=c.id 
 ) p    
Pivot (max(Value) for Value in ('+@Columns+'))  
 as pivottable  
 order by ClientID;'

执行(@DynamicPivotQuery)

接下来,我添加了row_number和partition函数,但似乎无法对其进行调试。我得到的错误是:

消息102,级别15,状态1,第29行
‘)’附近的语法不正确。

靠近XML Path函数。

任何帮助,将不胜感激。谢谢。

select @Columns=    
COALESCE(@Columns+',','')+QUOTENAME(Value)  
from (select distinct Document.Value    
, 'name'+ CAST (row_number() over   
(Partition BY clientid order by clientid) as NVARCHAR (10)) as Cols 
from document d
join Clients c on d.clientid=c.id

 t1

 --FOR XML PATH('')),      1, 1, N'');
 FOR XML PATH('')), TYPE).value('.','NVARCHAR(MAX)'),1,2,'')    
  order by ClientID

问题答案:

与一起使用cterow_number您可以达到以下结果:

您的架构:

create table your_table([Client ID] int ,Value varchar(50));
insert into your_table values
(12345,            'Did Not Meet'),
(12345,            'Did Not Meet'),
(12345,            'Partially Met'),
(12346,            'Partially Met'),
(12346,            'Partially Met'),
(12346,            'Partially Met'),
(12347,            'Partially Met'),
(12347,            'Partially Met'),
(12347,            'Did Not Meet'),
(12347,            'Met');

查询:

with cte as
(
 select [Client ID] ci,value,
        row_number() over(partition by [Client ID] order by value) as rn
 from your_table
)
select distinct ci as [Client ID],
       (select ct.value from cte ct where ct.ci=cte.ci and ct.rn=1) value1,
       (select ct.value from cte ct where ct.ci=cte.ci and ct.rn=2) value2,
       (select ct.value from cte ct where ct.ci=cte.ci and ct.rn=3) value3,
       (select ct.value from cte ct where ct.ci=cte.ci and ct.rn=4) value4
from cte

结果:

Client ID   value1          value2          value3          value4
12345       Did Not Meet    Did Not Meet    Partially Met   (null)
12346       Partially Met   Partially Met   Partially Met   (null)
12347       Did Not Meet    Met Partially   Met Partially    Met


 类似资料:
  • 问题内容: 我有一张这样的产品零件表: 部分 我想要一个查询,将返回这样的表: 在其实际实施中,将有数百万个产品零件 问题答案: 不幸的是,MySQL没有函数,但是您可以使用聚合函数和语句对其进行建模。对于动态版本,您将需要使用准备好的语句: 请参见带有演示的SQL Fiddle 如果只有几列,则可以使用静态版本:

  • 我在使用PIVOT SQL脚本时遇到了一个“小”问题。我目前的解决方案基于类似的问题 动态枢轴 . 我已经写好了PIVOT脚本,基本上没问题。然而,我的情况是这样的,脚本输出类似这样的内容,而不是将唯一的条目放在单行上 而我所寻找的结果应该是这样的 这是脚本 我将不胜感激一些可以帮助我解决这个问题的指示。我在这里做了一个小提琴,由于某种奇怪的原因,它没有输出任何东西,但生成架构的所有代码都在那里

  • 问题内容: 好吧,我有一张看起来像这样的表 现在,我需要将其转换为: 我一直在看动态透视图示例,但是我似乎无法使其适合我的情况。 有人可以帮忙吗? 问题答案: 看下面的例子

  • 在libGDX Box2D中,我有一个DynamicBody“身体”和静态身体“锚”,它的关节从“枢轴关节点”开始,身体可以围绕“枢轴点”转动,工作完美(位置2)。 但我想把“身体”旋转到特定的角度,当模拟运行,重力=10等时,身体转向底部。当我点击一个按钮时,我想将身体转到“myNewAngle”位置,如图所示(位置1) 我的问题是,我的身体正在转动它的原点(位置3),我想把它转到枢轴点,我设置

  • 问题内容: 我想要一种汇总数据库表的方法,以便将共享公共ID的行汇总为输出的一行。 我的工具是SQLite和Python2.x。 例如,鉴于以下是我当地超市的水果价格表,… …我想生成一个汇总表,向我显示每个超市的每种水果的价格。空格应为NULL。 我相信文献将其称为“数据透视表”或“数据透视查询”,但显然SQLite不支持。(该问题的解决方案使用了s的硬编码。这对我来说并没有太大的吸引力,因为我

  • 问题内容: 我将Require.js与Angular.js结合使用。 一些控制器需要巨大的外部依赖关系,而其他控制器则不需要,例如,需要Angular UI Codemirror 。这至少是135 kb,至少: 我不想每次我的页面加载时都只包含指令和Codemirror lib只是为了使Angular开心。 这就是为什么我现在仅在遇到路线时才加载控制器,就像这里所做的那样。 但是,当我需要类似的东