Возврат столбца в отдельной строке в операторе SELECT - PullRequest
6 голосов
/ 01 апреля 2019

В моей таблице Customers есть столбцы PrimaryPhone и SecondaryPhone, и меня просят возвратить их в двух отдельных строках.Также хочу отметить, что в большинстве случаев SecondaryPhone может даже не иметь значения, и в этих случаях нет необходимости возвращать вторую строку.

Итак, вот данные, поступающие из таблицы Customers:

CustomerId  |  CompanyName      |  PrimaryPhone    |  SecondaryPhone
123            Acme, Inc.          307-555-1234       307-555-2345
234            DataCorp, Inc.   |  824-555-6547

Мой оператор SELECT должен возвращать следующие данные:

CustomerId  | CompanyName     | Phone
123           Acme, Inc.        307-555-1234
123           Acme, Inc.        307-555-2345
234           DataCorp, Inc.    824-555-6547

Буду признателен за некоторые советы о том, как отображать данные из столбца в виде отдельной строки.Спасибо.

Ответы [ 3 ]

7 голосов
/ 01 апреля 2019

CROSS APPLY подойдет здесь

Select CustomerId
      ,CompanyName
      ,B.*
 From Customers A
 Cross Apply (values (PrimaryPhone)
                    ,(SecondaryPhone)
             ) B(Phone)
  Where Phone is not null

- РЕДАКТИРОВАТЬ забыл ГДЕ

3 голосов
/ 01 апреля 2019

Вы можете попробовать подобный союз

SELECT
    CustomerId,
    CompanyName,
    PrimaryPhone as Phone,
FROM dbo.Customers
UNION 
SELECT
    CustomerId,
    CompanyName,
    SecondaryPhone as Phone,
FROM dbo.Customers
WHERE 
    SecondaryPhone IS NOT NULL
0 голосов
/ 02 апреля 2019

Это идеальный способ (запрос) для решения вашей проблемы

SELECT
    CustomerId,
    CompanyName,
    PrimaryPhone as Phone
FROM dbo.Customer
UNION  
SELECT
    CustomerId,
    CompanyName,
    SecondaryPhone as Phone
FROM dbo.Customer
WHERE 
  DATALENGTH(SecondaryPhone)<>0

Вывод:

Output

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