Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
Umar_halif
Member

Откуда: Кыргызстан
Сообщений: 25
Здравствуйте. Подскажите пожалуйста, как можно скрыть нулевые столбцы в таблице, чтобы они не отображались. К примеру есть следующая таблица:

Number|FIO |Salary|
012001|Aman1| 0 |
012002|Aman2| 0 |
012003|Aman3| 0 |
012004|Aman4| 0 |

Чтобы он выглядел следующим образом:
Number|FIO |
012001|Aman1|
012002|Aman2|
012003|Aman3|
012004|Aman4|
2 сен 11, 08:46    [11216048]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Umar_halif,
не совсем понятно... Если вам нужно вообще исключить Salary, то просто:
select Number, FIO from ...
если же вместо 0 в Salary выводить NULL, то:
select Number, FIO, nullif(Salary,0) Salary from ...
если же вместо 0 в Salary выводить пусто, то:
select Number, FIO, case Salary when 0 then '' else ltrim(str(Salary)) end Salary  from ...
2 сен 11, 08:50    [11216057]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
Umar_halif
Member

Откуда: Кыргызстан
Сообщений: 25
Мне нужно вообще убрать столбец, содержащий нули, чтобы он вообще не отображался в запросе
2 сен 11, 09:29    [11216164]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
Umar_halif
Member

Откуда: Кыргызстан
Сообщений: 25
Umar_halif
Мне нужно вообще убрать столбец, содержащий нули, чтобы он вообще не отображался в таблице
2 сен 11, 09:30    [11216172]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Umar_halif
Мне нужно вообще убрать столбец, содержащий нули, чтобы он вообще не отображался в запросе

Ну так не выводите его, в чем проблема?

Или вам нужно динамическое кол-во столбцев? В таком случае только динамическим запросом можно сделать.
2 сен 11, 09:37    [11216199]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
Umar_halif
Member

Откуда: Кыргызстан
Сообщений: 25
Наверное я не правильно поставил вопрос. Вобщем. Есть следующая таблица, которая содержит Данные о сотруднике, его зарплате и удержания от зарплаты:

Номер|ФИО |Зарплата|Путевки в санаторий|Теплоэнергия|Коммунальные услуги
012001|Aman| 4548 |0|250|0
012002|Ivan| 70000 |0|240|0
012003|Alek| 15450 |0|123|0
012004|Petr| 78950 |0|120|0

Чтобы он выглядел следующим образом:
Номер|ФИО |Зарплата|Теплоэнергия
012001|Aman| 4548 |250|
012002|Ivan| 70000 |240|
012003|Alek| 15450 |123|
012004|Petr| 78950 |120|

как это можно реализовать. Заранее благодарен
2 сен 11, 09:43    [11216229]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Umar_halif, хорошо. Зайдем с другой стороны. Как вы делаете выборку сейчас?
2 сен 11, 09:47    [11216259]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Umar_halif, вот для случая динамики, если она вам конечно нужна:
CREATE TABLE #tbl(zzz VARCHAR(10), a INT, b INT)

INSERT INTO #tbl
SELECT 'aaa', 0, 1 UNION ALL SELECT
'aaa', 0, 0 UNION ALL SELECT
'aaa', 0, 0 UNION ALL SELECT
'aaa', 0, 5

DECLARE @ssql NVARCHAR(max)

SELECT @ssql='select t.zzz'+CASE SUM(a) WHEN 0 THEN '' ELSE ', t.a' END
+CASE SUM(b) WHEN 0 THEN '' ELSE ', t.b' END+' from #tbl t'
FROM #tbl

EXEC(@ssql)
DROP TABLE #tbl
2 сен 11, 09:59    [11216332]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Посоветовали же - динамическим запросом
Примерно вот так.
Declare @query varchar(4000)


select @query  = 'select '

If exists (select * from table where field1 <> 0)
   select  @query  = @query + 'field1, '

If exists (select * from table where field2 <> 0)
   select  @query  = @query + 'field2, '
....

select @query = @query + ' from table'

exec (@query)

Хотя вообще такие вещи лучше делать на клиенте.
2 сен 11, 09:59    [11216343]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
kDnZP, Кот Матроскин,
зачем с утра человеку дым с головы пускать?

>Зайдем с другой стороны. Как вы делаете выборку сейчас?
вот это был хороший ответ
2 сен 11, 10:03    [11216373]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
А мне кажется, что это вопрос по отображению рекордсета на клиенте.
Сервер здесь не при чём.
2 сен 11, 10:04    [11216392]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
Umar_halif
Member

Откуда: Кыргызстан
Сообщений: 25
Вот запрос. Но он выводит все столбцы нулевые и ненулевые
2 сен 11, 10:26    [11216557]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
Umar_halif
Member

Откуда: Кыргызстан
Сообщений: 25
Umar_halif
Вот запрос. Но он выводит все столбцы нулевые и ненулевые


Select TABNUM 'Табель',FIO 'ФИО',L_SCHET 'Лицевой счет',PASSPORT 'Паспорт',SUMMA 'Сумма к выдаче',
sum(GSM)'ГСМ',sum(PutBO) 'Путевки БО',sum(Komus) 'Ком. услуги',
sum(Pit) 'Питание',sum(Lek) 'Лекарства',sum(Zdrav) 'Услуги здравпункта',
sum(Sanat) 'Путевки в санаторий',sum(Kvart) 'Кв. плата',sum(Rod) 'Род. взносы',sum(Frut) 'Фрукты БО',
sum(TMC) 'ТМЦ',sum(Teplo) 'Теплоэнергия',sum(Proch) 'Прочие',
sum(GSM+PutBO+Komus+Pit+Lek+Zdrav+Sanat+Kvart+Rod+Frut+TMC+Teplo+Proch) as 'Итого',
Summa-sum(GSM+PutBO+Komus+Pit+Lek+Zdrav+Sanat+Kvart+Rod+Frut+TMC+Teplo+Proch) as 'Итого к выдаче'
from Buh
Group by TABNUM,FIO,L_SCHET,PASSPORT,SUMMA
2 сен 11, 10:26    [11216561]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Umar_halif
Вот запрос. Но он выводит все столбцы нулевые и ненулевые
И правильно делает!
2 сен 11, 10:27    [11216566]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
Umar_halif
Member

Откуда: Кыргызстан
Сообщений: 25
kDnZP, Спасибо большое получилось. Долго мучился. Благодарен Вам
2 сен 11, 10:34    [11216609]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
a_mne_mozhno?
Guest
а мне не подскажете случайно?
похожая ситуация, только полей не 2, а 300.
и надо бы вывести только те, которые не "целиком 0 или целиком NULL".
т.е. все то же самое, но можно ли не писать 300 строк в динамике,
а как-то из сис. каталога брать названия полей, проверять: поле целиком 0 или целиком NULL, если так, отбрасываем,
если нет-- в динам.запрос его.
вот такую процедуру можно как-то написать?

нужно для создания отчета.
отчетная система может выдавать результаты запроса или процедуры,
если результат процедуры -- таблица.
пока именно что реализовано "на клиенте": вываливаются все 300 столбцов
и человек ручками убирает ненужные колонки.
дурдом...
2 сен 11, 11:44    [11217035]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
a_mne_mozhno?,
Можно. Версия сервера какая?
2 сен 11, 11:46    [11217047]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
a_mne_mozhno?
Guest
kDnZP,
2005.
если можно, подскажите, а то я только запросы писала, никаких хранимок.
а жизнь бы это облегчило...
2 сен 11, 11:55    [11217134]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
a_mne_mozhno?
kDnZP,
2005.
если можно, подскажите, а то я только запросы писала, никаких хранимок.
а жизнь бы это облегчило...

Блин, на работе чуть отвлекли, после обеда пример сделаю.
2 сен 11, 12:52    [11217605]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
a_mne_mozhno?, че-то типа такого, доработаете уже под себя (zzz - типа поле, которое выводится полюбому):
IF EXISTS ( SELECT  *
            FROM    sysobjects
            WHERE   id = OBJECT_ID('dbo.tbl') ) 
    DROP TABLE tbl

CREATE TABLE tbl(zzz VARCHAR(10), a INT, b INT, c FLOAT, d VARCHAR(5))

INSERT INTO tbl
SELECT 'aaa', 0, 1, 8.56, 'test' UNION ALL SELECT
'bbb', NULL, 0, 0, '' UNION ALL SELECT
'ccc', 0, NULL, 0, '' UNION ALL SELECT
'ddd', 0, 5, NULL, NULL

DECLARE @ssql NVARCHAR(max)
DECLARE @ssql2 NVARCHAR(max)
SET @ssql2=''
SET @ssql='SELECT s FROM ( SELECT  NULL [0dummy0]'
SELECT @ssql=@ssql+CASE WHEN 
	s.DATA_TYPE IN ('int','float')
THEN ', CASE COUNT(NULLIF('+s.COLUMN_NAME+',0)) WHEN 0 THEN NULL ELSE '''+s.COLUMN_NAME+''''
ELSE ', CASE COUNT(NULLIF('+s.COLUMN_NAME+','''')) WHEN 0 THEN NULL ELSE '''+s.COLUMN_NAME+'''' END+' END as '+s.COLUMN_NAME
FROM
(SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='dbo' AND TABLE_NAME='tbl' AND COLUMN_NAME NOT IN ('zzz')) s
SELECT @ssql2=@ssql2+'['+s.COLUMN_NAME+']'
FROM
(SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='dbo' AND TABLE_NAME='tbl' AND COLUMN_NAME NOT IN ('zzz')) s
SELECT @ssql2=REPLACE(@ssql2,'][','],[')
SELECT @ssql=@ssql+' FROM dbo.tbl )t UNPIVOT (s FOR f IN ('+@ssql2+')) AS unpvt WHERE   s <> '''' ORDER BY f'

IF EXISTS ( SELECT  *
            FROM    tempdb.dbo.sysobjects
            WHERE   id = OBJECT_ID('tempdb.dbo.#tmp') ) 
    DROP TABLE #tmp
CREATE TABLE #tmp(ssql NVARCHAR(MAX))

INSERT INTO #tmp
EXEC(@ssql)
SELECT @ssql='SELECT zzz'
SELECT @ssql=@ssql+', '+t.ssql FROM #tmp t
SET @ssql=@ssql+' FROM dbo.tbl'

PRINT(@ssql)
exec (@ssql)
DROP TABLE tbl
2 сен 11, 14:46    [11218672]     Ответить | Цитировать Сообщить модератору
 Re: Как скрыть нулевые столбцы в таблице, чтобы они не отображались  [new]
a_mne_mozhno?
Guest
kDnZP,

большое спасибо, буду разбираться
3 сен 11, 17:00    [11222730]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить