Получение данных из нескольких столбцов как одного в процедуре SQL - PullRequest
0 голосов
/ 15 октября 2018

Я использую MSSQL Server.У меня есть стол со столбиками: Id, State1, State2, State3, City1, City2, City3, Street1, Street2, Street3.Где State1, City1, Street1 являются «тройными».Мне нужно выбрать все данные из таблицы, где (State1 = xyz, City1 = xyzv, Street1 = abcd) or (State2 = xyz....) и показать это так: State1 as State/State2 as State -> то же имя для каждого тройного столбца.Я должен сказать, что каждая тройка в строке является уникальной или нулевой.Таким образом, в строке может быть 1,2,3 уникальных адреса.

Как я могу это сделать?Теперь у меня есть что-то подобное, но есть

Msg 116, Уровень 16, Состояние 1, Строка 14 Только одно выражение может быть указано в списке выбора, когда подзапрос не введен с EXISTS.ошибка.

    select ds.Data as Data, 
    case 
    when ds.Gmina1 = @StateName and ds.Miejscowosc1 = @CityName and ds.Street1 = @StreetName and ds.LocalNumber1 = @LocalNumber then (select ds.Gmina1 as Gmina, ds.Miejscowosc1 as Miasto, ds.Street1 as Ulica, ds.LocalNumber1 from Dostawy)
    when ds.Gmina2 = @StateName and ds.Miejscowosc2 = @CityName and ds.Street2 = @StreetName and ds.LocalNumber2 = @LocalNumber then (select ds.Gmina2 as Gmina, ds.Miejscowosc2 as Miasto, ds.Street2 as Ulica, ds.LocalNumber2 from Dostawy)
    when ds.Gmina2 = @StateName and ds.Miejscowosc3 = @CityName and ds.Street3 = @StreetName and ds.LocalNumber3 = @LocalNumber then (select ds.Gmina3 as Gmina, ds.Miejscowosc3 as Miasto, ds.Street3 as Ulica, ds.LocalNumber3 from Dostawy)
    else null
    end
  from dbo.Dostawy as ds 

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Другой возможный подход для получения набора результатов - использовать UNION ALL и соответствующее WHERE предложение:

SELECT ds.Data AS Data, ds.Gmina1 AS Gmina, ds.Miejscowosc1 AS Miasto, ds.Street1 AS Ulica, ds.LocalNumber1 AS LocalNumber
FROM Dostawy ds
WHERE
    ds.Gmina1 = @StateName AND
    ds.Miejscowosc1 = @CityName AND
    ds.Street1 = @StreetName AND 
    ds.LocalNumber1 = @LocalNumber
UNION ALL
SELECT ds.Data AS Data, ds.Gmina2 AS Gmina, ds.Miejscowosc2 AS Miasto, ds.Street2 AS Ulica, ds.LocalNumber2 AS LocalNumber 
FROM Dostawy ds
WHERE
    ds.Gmina2 = @StateName AND
    ds.Miejscowosc2 = @CityName AND
    ds.Street2 = @StreetName AND 
    ds.LocalNumber2 = @LocalNumber
UNION ALL
SELECT 
    ds.Data AS Data, ds.Gmina3 AS Gmina, ds.Miejscowosc3 AS Miasto, ds.Street3 AS Ulica, ds.LocalNumber3 AS LocalNumber 
FROM Dostawy ds
WHERE 
    ds.Gmina2 = @StateName AND
    ds.Miejscowosc3 = @CityName AND
    ds.Street3 = @StreetName AND 
    ds.LocalNumber3 = @LocalNumber
0 голосов
/ 15 октября 2018

Основной причиной ошибки является выражение ниже в каждом блоке THEN.Как объясняет ошибка, вы не можете иметь несколько столбцов, поэтому вы должны выбрать только один.

(select ds.Gmina1 as Gmina, ds.Miejscowosc1 as Miasto, ds.Street1 as Ulica, ds.LocalNumber1 from Dostawy)

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

select ds.Data as Data, 
    case 
    when ds.Gmina1 = @StateName and ds.Miejscowosc1 = @CityName and ds.Street1 = @StreetName and ds.LocalNumber1 = @LocalNumber then ds.Gmina1
    when ds.Gmina2 = @StateName and ds.Miejscowosc2 = @CityName and ds.Street2 = @StreetName and ds.LocalNumber2 = @LocalNumber then ds.Gmina2
    when ds.Gmina2 = @StateName and ds.Miejscowosc3 = @CityName and ds.Street3 = @StreetName and ds.LocalNumber3 = @LocalNumber then ds.Gmina3
    else null
    end as Gmina
  from dbo.Dostawy as ds 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...