Я должен показать и скрыть столбец таблицы на основе значения флага, хранящегося во второй таблице - PullRequest
0 голосов
/ 13 июня 2018

Первая таблица содержит флаг (1 для шоу 0 для скрытия) для столбца, который присутствовал во второй таблице.Я должен показать столбцы второй таблицы на основе флага, хранящегося в первой таблице.

Первая таблица:

Id  columnName    isHidden  
1   Name           1           
2   Email          1           
3   Password       0           
4   Country        1           
5   State          1           
6   filename       1           
7   Salary         1           

Вторая таблица:

Name    Password    Country   State     filename        Salary   Email
tom     tom           India  Haryana    6f0fbcec.jpg    9100.00  tom@mail.com
Mark    test          India  Haryana    b7f14d8a.png    8800.00  te@gmail.com
fdgd    gffdg         India   Delhi      d12f0438.txt   9100.00  abs@mail.com

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Нет необходимости объявлять каждый столбец отдельно, как у Джорджа, вы можете построить его, используя FOR XML PATH:

USE Sandbox;
GO

CREATE TABLE FirstTable (Id int, columnName sysname, isHidden bit);

INSERT INTO FirstTable
VALUES (1,N'Name',1),
       (2,N'Email',1),
       (3,N'Password',0),
       (4,N'Country',1),
       (5,N'State',1),
       (6,N'filename',1),
       (7,N'Salary',1);
GO

DECLARE @SQL nvarchar(MAX);

SET @SQL = N'SELECT ' + ISNULL(STUFF((SELECT N',' + NCHAR(10) + N'       ' + QUOTENAME(columnName)
                                  FROM FirstTable
                                  WHERE isHidden = 1 --0 (false) for the column "isHidden"? Seem counter intuitive. 
                                  FOR XML PATH(N'')),1,9,N''),N'*') + NCHAR(10) +
           N'FROM SecondTable;';
PRINT @SQL; --Your Best Friend
--EXEC sp_executesql @SQL; --Uncomment to execute
GO
DROP TABLE FirstTable;

Если, однако, вы используете SSRS, я бы на самом деле предпочел бы использовать выражениетам, где прячутся столбцы, а не строится динамический SQL как этот.Тем более, что SSRS не может обрабатывать динамические столбцы.

0 голосов
/ 13 июня 2018

Я думаю, что это поможет

DECLARE @SQLStatement NVARCHAR(MAX) = N''

DECLARE  @Columns_to_show NVARCHAR(MAX) = N''

SELECT @Columns_to_show = @Columns_to_show + ', QUOTENAME(columnName) 
FROM
    (SELECT columnName FROM [INPUT_TABLE1] WHERE isHidden = 0) DT

SET @SQLStatement = N'SELECT' +  @Columns_to_show + 'FROM [INPUT_TABLE2]' 
0 голосов
/ 13 июня 2018

Вам придется использовать динамический SQL:

declare @sqlcmd nvarchar(max)=
    'select '
    +STUFF( -- stuff is used to remove the first comma
     case when (select isHidden from your_first_table where Id=1)=0 then ',Name'        else '' end
    +case when (select isHidden from your_first_table where Id=2)=0 then ',Email'       else '' end
    +case when (select isHidden from your_first_table where Id=3)=0 then ',Password'    else '' end
    +case when (select isHidden from your_first_table where Id=4)=0 then ',Country'     else '' end
    +case when (select isHidden from your_first_table where Id=5)=0 then ',State'       else '' end
    +case when (select isHidden from your_first_table where Id=6)=0 then ',filename'    else '' end
    +case when (select isHidden from your_first_table where Id=7)=0 then ',Salary'      else '' end
    ,1,1,'')
    +' from your_second_table'

exec (@sqlcmd)

Обратите внимание, что это приведет к ошибке, если все столбцы имеют isHidden = 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...