【问题标题】:How to write query with dynamic columns?如何使用动态列编写查询?
【发布时间】:2016-07-20 18:07:41
【问题描述】:

我有以下表格

 PeopleInformation

包含以下列:

 PeopleID,
 FirstName,
 LastName,
 DOB,
 Email,
 ContactNo etc

还有一张桌子

ColumnInformation

包含以下列:

ColumnID
ColumnName
UserID

因此在 ColumnInformation 表中添加了用户列。 所以假设用户 ID = 1 的用户,那么我需要显示仅分配给他的列

所以,我想编写查询,通过 UserID 从 columnInformaiton 生成 PeopleInformation 记录

【问题讨论】:

  • 您能发布一些示例数据和预期结果吗?
  • 我相信这 (stackoverflow.com/questions/7041553/…) 就是您所追求的。 UserId -> ColumnName(s) 并仅从 PeopleInformation 中选择这些列。不过你应该考虑重组。
  • 这听起来很奇怪。如果您想根据是否适用于该用户来限制显示的列数,更常规的方法是返回所有列,但是如果您愿意,可以在显示中隐藏为该用户返回 null 的那些。
  • 如何在 ColumnInformation 表中保留特定用户的记录。按行或逗号分隔的列表

标签: sql sql-server-2008


【解决方案1】:

我假设您将每个用户的列详细信息按行维护。请参考这里,

DECLARE @UserId INT = 2
DECLARE @sql NVARCHAR(max) = ''
    ,@columnlist NVARCHAR(max) = ''
DECLARE @ColumnInformation TABLE (
    ColumnID INT identity(1, 1)
    ,ColumnName VARCHAR(50)
    ,UserID INT
    )

insert into @ColumnInformation
values 
('PeopleID',1)
,('FirstName',1)
,('LastName',1)
,('DOB',1)
,('Email',1)
,('ContactNo',1)
,('PeopleID',2)
,('FirstName',2)
,('LastName',2)

SELECT @columnlist = @columnlist + ',' + ColumnName
FROM @ColumnInformation
WHERE UserID = @UserId

SELECT @columnlist = stuff(@columnlist, 1, 1, '')

SET @sql = 'select ' + @columnlist + ' from PeopleInformation'

EXEC sp_executesql @sql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2015-02-04
    • 1970-01-01
    • 2019-06-29
    • 2012-03-27
    相关资源
    最近更新 更多