首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单枢轴表

简单枢轴表
EN

Stack Overflow用户
提问于 2014-08-22 17:43:43
回答 2查看 53关注 0票数 0

我有两个表:接口和ConnectionStrings。这些表之间有很多到很多的关系,我通过添加第三个表InterfaceConnectionStrings来规范这个关系。我可以通过存储过程查询表,以获得我需要的数据:

代码语言:javascript
复制
Select I.InterfaceName as IName
,CS.ConnectionStringDescription as Descr
,CS.ConnectionStringValue as Value
from ConnectionStrings CS
JOIN InterfaceConnectionStrings ICS
on CS.ConnectionStringDescription = ICS.ConnectionStringDescription
JOIN Interfaces I
on ICS.InterfaceName = I.InterfaceName
where InterfaceName = @InterfaceName

结果如下所示:

代码语言:javascript
复制
**IName**       **Descr**     **Value**
InterfaceX      CSDescr1      CS1Value
InterfaceX      CSDescr2      CS2Value
InterfaceX      CSDescr3      CS3Value

我想找到一个查询,它将返回以下内容:

代码语言:javascript
复制
**IName**       **CSDescr1**     **CSDescr2**  **CSDescr3**
InterfaceX      CS1Value         CS2Value      CS3Value   

我试着使用枢轴,但没有取得多大进展。以下是我到目前为止所拥有的:

代码语言:javascript
复制
Select InterfaceName as IName
,ConnectionStringDescription as Descr
,ConnectionStringValue as Value
From (
Select I.InterfaceName 
,CS.ConnectionStringDescription
,CS.ConnectionStringValue
 from ConnectionStrings CS
JOIN InterfaceConnectionStrings ICS
on CS.ConnectionStringDescription = ICS.ConnectionStringDescription
JOIN Interfaces I
on ICS.InterfaceName = I.InterfaceName) PvtBase

PIVOT

( MAX(PvtBase.Value) FOR
PvtBase.Descr IN PvtBase.Value) as Pvt
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-22 17:51:20

例如:

代码语言:javascript
复制
declare @table table (iName varchar(25), Descr varchar(25), Value varchar(25))

insert into @table
select 'InterfaceX','CSDescr1','CS1Value' UNION ALL
select 'InterfaceX','CSDescr2','CS2Value' UNION ALL
select 'InterfaceX','CSDescr3','CS3Value'

select *
from (select * from @table) sub
pivot (max(value) for descr in ([CSDescr1],[CSDescr2],[CSDescr3])) p

对于您来说,只需将SELECT * FROM @TABLE替换为初始查询(添加一些别名)。

代码语言:javascript
复制
select *
from ( Select I.InterfaceName as iName
             ,CS.ConnectionStringDescription as descr
             ,CS.ConnectionStringValue as value
             from ConnectionStrings CS 
             JOIN InterfaceConnectionStrings ICS
                on CS.ConnectionStringDescription = ICS.ConnectionStringDescription
             JOIN Interfaces I
                on ICS.InterfaceName = I.InterfaceName
             where InterfaceName = @InterfaceName) sub
pivot (max(value) for descr in ([CSDescr1],[CSDescr2],[CSDescr3])) p
票数 1
EN

Stack Overflow用户

发布于 2014-08-22 17:52:09

代码语言:javascript
复制
SELECT *
FROM (
        Select  I.InterfaceName                 as IName
               ,CS.ConnectionStringDescription  as Descr
               ,CS.ConnectionStringValue        as Value
        from ConnectionStrings CS
        JOIN InterfaceConnectionStrings ICS
        on CS.ConnectionStringDescription = ICS.ConnectionStringDescription
        JOIN Interfaces I
        on ICS.InterfaceName = I.InterfaceName
        where InterfaceName = @InterfaceName
     ) t
PIVOT (MAX(Value)
       FOR Descr
       IN ([CSDescr1],[CSDescr2],[CSDescr3])
      )p
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25452762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档