Samira Radwan Ответов: 1

Выберите одну и ту же строку дважды с разными значениями столбцов без использования объединения


Всем Привет,

Если у меня есть стол выглядит так:
(ID,fName,lName,choice1,choice2)
Если я выберите * myTable, где Id=1 он должен возвращать 1 строку с 2 вариантами выбора
Я хотел бы выбрать из таблицы одну и ту же строку дважды с одним из вариантов каждый раз, как показано ниже:
1,Джон , Доу, choice1
1,Джон, Доу, choice2

Есть идеи как это реализовать без используя союз?
Любая помощь будет оценена по достоинству

Что я уже пробовал:

Я попробовал использовать union который должен работать
Select Id,fName,lName,choice1
from myTable
WHERE choice1>0
UNION
Select Id,fName,lName,choice2
from myTable
WHERE choice2>0

--I'm looking for a solution that doesn't use union

Mohibur Rashid

Почему ты ненавидишь профсоюз?

Если у вас возникли проблемы с получением обоих элементов, используйте
СОЮЗ ВСЕХ

Samira Radwan

это требование не использовать UNION или UNION ALL

Mohibur Rashid

Это же домашнее задание!

Samira Radwan

нет, мой босс не любит профсоюзы !!
сказанное нужно сделать по-другому, чего я на самом деле не знаю

Mohibur Rashid

это странно! попробовать "отмена сведения", я не уверен, если это поможет https://stackoverflow.com/questions/18026236/sql-server-columns-to-rows

Richard Deeming

Тогда, возможно, ваш босс должен объяснить, что он думает о решении, и почему ему это не нравится UNION.

Звучит как плохой случай программирования "карго-культа" - он однажды бегло просмотрел где-то статью, в которой был конкретный сценарий, где UNION создавал проблемы, и все, что он отнимал у нее, - это мысль о том, что "UNION плохо", не имея ничего, чтобы поддержать это мнение.

Или, может быть, он имел в виду профсоюзные объединения[^], а это совсем другое дело. :)

Samira Radwan

ЛОЛ :)
Иногда лучше не спрашивать!! ;)
Кроме того, глядя на светлую сторону, я узнал новый подход благодаря @Mohibur :)
Спасибо!

1 Ответов

Рейтинг:
12

Mohibur Rashid

Образец теста для вас с UNPIVOT, побежал в sqlfiddle.com

-- SCHEMA


CREATE TABLE geek
    (id int, [choice1] int, [choice2] int)
;

INSERT INTO geek
    ([id], [choice1], [choice2])
VALUES
    (1, 10, 20),
    (2, 30, 0),
    (3, 0, 40)
;


-- query
SELECT
    id
  , choice
FROM geek
UNPIVOT (
  choice
  FOR value in (choice1, choice2)
) unpiv

WHERE choice > 0
;


--result
id	choice
1	10
1	20
2	30
3	40


ссылка на sqlfiddle[^]