在SELECT语句的单独行中返回列

时间:2019-04-01 14:27:04

标签: sql-server tsql

在我的Customers表中,我有PrimaryPhoneSecondaryPhone列,并要求我在两行中分别返回它们。我还要提及的是,在大多数情况下,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 个答案:

答案 0 :(得分:7)

在这里交叉申请将是一个很好的选择

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

-编辑忘记了位置

答案 1 :(得分:3)

您可以尝试这样的工会

SELECT
    CustomerId,
    CompanyName,
    PrimaryPhone as Phone,
FROM dbo.Customers
UNION 
SELECT
    CustomerId,
    CompanyName,
    SecondaryPhone as Phone,
FROM dbo.Customers
WHERE 
    SecondaryPhone IS NOT NULL

答案 2 :(得分:0)

这是解决问题的完美方法(查询)

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

输出:

Output