【问题标题】:Need T-SQL help for converting Rows from multiple tables into Columns with values in Sql Server 2005需要 T-SQL 帮助以将多个表中的行转换为具有 Sql Server 2005 中的值的列
【发布时间】:2012-03-20 20:47:20
【问题描述】:

我有一个表 tblUser:

tblUser

以及下面给出的表 tblBCE 和数据:

tblBCE

和一个主表 mstBCE,其中包含要在前端应用程序中显示的标签文本。此表还包含其他选项卡的数据,但目前我只想要 tabType 'BCE',一旦我了解了这个概念,我会自己为其他选项卡做。

mstBCE

tblBCE 和 mstBCE 表之间没有关系,我们只需要遵循从上到下的顺序。

在前端应用程序中,我仅按顺序显示这些数据,即

我按照两个表的顺序显示数据,例如标签“标签显示 text111111 BCE”的注释值应该是 cmets111111,标签“标签显示 text222222 BCE”应该是“cmets22222”等。

在前端它为一个用户显示如下:

所以输出会是。

输出

谢谢

【问题讨论】:

  • 我并不认为您可以在没有 mstBCE 和 tblBCE 之间的关系的情况下执行此操作。因为没有办法知道你是否要输出是或否。
  • 好的,所以我们可以将 Option1 硬编码为“tab display text111111 BCE”标签,Option2 到“tab display text222222 BCE”等,因为 mstBCE 仅包含标签文本。
  • 对于 BCE 类型的三列是固定的
  • 你能显示你想要的输出吗?随着这些变化。
  • 我在我的问题中提到了输出。请看最后一张有问题的图片

标签: sql-server-2005 tsql pivot


【解决方案1】:

我的第一个想法是改进架构,你真的需要这样做吗?

为了简化问题,您似乎希望根据与 mstBCE 的连接来设置列名。 您不需要关系,因为 tblBCE 中的列数是固定的。而是使用动态 sql 来设置从 mstBCE 中选择的列名到一行。

DECLARE @sql nvarchar(4000); 
SELECT @sql = N'SELECT u.[username], u.[department], 
b.[Option1TB] as [' + pvt.[1] + N'], b.[Option1], 
b.[Option2TB] as [' + pvt.[2] + N'], b.[Option2], 
b.[Option3TB] as [' + pvt.[3] + N'], b.[Option3] 
FROM tblBCE as b 
JOIN tblUser as u ON b.[UserID] = u.[userid]; ' 
FROM (
    SELECT [tabconfigid], [tabdata] 
    FROM mstBCE 
    WHERE [tabType] = N'BCE'
) as m 
PIVOT ( MIN(m.[tabdata]) FOR m.[tabconfigid] IN ([1], [2], [3]) ) as pvt; 

EXEC (@sql); 

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 2012-03-05
    • 2010-10-13
    • 2012-03-19
    • 2014-02-01
    • 1970-01-01
    • 2021-10-18
    • 2012-08-21
    • 1970-01-01
    相关资源
    最近更新 更多