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

Откуда:
Сообщений: 120
Добрый день!
Есть таблица с данными. В ней их может быть два варианта

первый - где все данные столбца = -1 и второй где они разные. Как лучше сделать чтобы в итоге если все значения столбца =-1 выводилось -1 а если есть отличные от -1 выводились значения

К сообщению приложен файл. Размер - 2Kb
6 июл 17, 07:58    [20617666]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
Romanov-krd
Member

Откуда:
Сообщений: 120


К сообщению приложен файл. Размер - 2Kb
6 июл 17, 07:58    [20617667]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31356
Romanov-krd
Как лучше сделать чтобы в итоге если все значения столбца =-1 выводилось -1 а если есть отличные от -1 выводились значения
Вдумался в задачу...
Для этого нужно просто вывести столбец.
Тогда, если его значение =-1, выведется -1, а если отличное от -1 выведется значение.
6 июл 17, 08:47    [20617746]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
Romanov-krd
Member

Откуда:
Сообщений: 120
нужно что бы удалялся столбец -1 а выводилось только значение ели в столбце есть что то кроме -1
6 июл 17, 08:54    [20617751]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31356
Romanov-krd
нужно что бы удалялся столбец -1 а выводилось только значение ели в столбце есть что то кроме -1
where WHS_ID <> -1
6 июл 17, 08:59    [20617757]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
Romanov-krd
Member

Откуда:
Сообщений: 120
тогда cfo_id 75777 тоже удалиться. А нужно чтобы в итоге если есть cfo_id у которого кроме -1 нет значений в поле whs_id тогда выводим -1 если есть другие значения то выводим другие.
вот на подобии этого запроса только как то изменить чтобы -1 тоже попадало если других нет значений, а то после else поставил -1 а в условии w.whs_id<>-1 стоит и соответственно не выбирает там где только -1

select case when TotalC =1 then t.whs_id else -1  end whs from
(select count(w.whs_id) TotalC, w.whs_id from DEV_DB_HYP.V_HYPE_DIVISION_WHS w
inner join DEV_DB_HYP.V_HYPE_DIVISION_CFO c on w.division_id=c.division_id where  w.whs_id<>-1
group by w.whs_id
) t
6 июл 17, 09:31    [20617813]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
Massa52
Member

Откуда:
Сообщений: 379
;WITH c AS
(
  SELECT 28242 id, -1 whs
  UNION 
  SELECT 28242 id, 6597 whs
  UNION
  SELECT 75777 id, -1 whs
  UNION ALL
  SELECT 75777 id, -1 whs 
),
c1 AS 
(
  SELECT id, SUM(CASE WHEN whs = -1 THEN 0 ELSE 1 END) n 
  FROM c
  GROUP BY id
)
SELECT DISTINCT c.* 
FROM c INNER JOIN c1 ON c.id = c1.id
WHERE whs <> -1 OR n = 0   
6 июл 17, 10:10    [20617912]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Massa52
...

По-моему тут все проще, чем он осилил описать
WITH
c ( [id], [whs] ) AS (
  SELECT 28242, -1
  UNION ALL
  SELECT 28242, 6597
  UNION ALL
  SELECT 75777, -1
  UNION ALL
  SELECT 75777, -1
)
SELECT
  [id],
  [whs] = MAX( [whs] )
FROM
  c
GROUP BY
  [id]
;
6 июл 17, 10:35    [20617999]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
Romanov-krd,

Вы неправильно составили структуру данных. У Вас должна быть таблица, в которой битовым полем Вы пометите те ID, которые не надо отбирать в запросе.
В итоге выборка будет возвращать объединение двух наборов данных: с -1 и фактические.

tbl1
keyvalue
1asdf
2zxc
3qwe


tbl2
keyshow
11
20
31


select key, value from tbl1 where exists (select * from tbl2 where tbl1.key = tbl2.key and tbl2.show = 1)
union all
select key, -1 from tbl1 where exists (select * from tbl2 where tbl1.key = tbl2.key and tbl2.show = 0)
6 июл 17, 12:34    [20618588]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
Romanov-krd
Member

Откуда:
Сообщений: 120
сделал вот так
select	 
	V_HYPE_DIVISION_CFO.CFO_ID,
	max(V_HYPE_DIVISION_WHS.WHS_ID) 
from	DEV_DB_HYP.V_HYPE_DIVISION_WHS    V_HYPE_DIVISION_WHS INNER JOIN DEV_DB_HYP.V_HYPE_DIVISION_CFO    V_HYPE_DIVISION_CFO ON V_HYPE_DIVISION_WHS.DIVISION_ID=V_HYPE_DIVISION_CFO.DIVISION_ID 
where V_HYPE_DIVISION_CFO.CFO_ID in (75777)
Group By V_HYPE_DIVISION_CFO.CFO_ID 
6 июл 17, 13:32    [20618915]     Ответить | Цитировать Сообщить модератору
 Re: Выбор столбцов в зависимости от значения  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Бинго!
6 июл 17, 15:13    [20619431]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить