Sql 如何将列转换为不同的值,使每列有多行

Sql 如何将列转换为不同的值,使每列有多行,sql,sql-server,Sql,Sql Server,我有一个表,每行都有一个客户名称和一个GUID,GUID是一个访问群体的代码。我希望得到一个结果,即每个列都有每个客户的guid 原始表格: Customer | Audience | Customer A | a4e7c9b7-c9d6-4698-8dc8-e0f2920f6bb7 Customer B | 7a1d31b9-ecec-4c09-9eb9-cb10a8cc7d58 Customer A | fa89f9

我有一个表,每行都有一个客户名称和一个GUID,GUID是一个访问群体的代码。我希望得到一个结果,即每个列都有每个客户的guid

原始表格:

Customer        | Audience
                |
Customer A      | a4e7c9b7-c9d6-4698-8dc8-e0f2920f6bb7
Customer B      | 7a1d31b9-ecec-4c09-9eb9-cb10a8cc7d58
Customer A      | fa89f93d-ad7c-47ee-9a0c-598430c63c43
Customer C      | 0bc45f14-6c1b-48cf-a79e-a7cdc24deecc
Customer A      | 980b90cc-c923-46be-a180-bbbdf43169b2
Customer B      | 29d4806f-70fb-4b5f-9630-7314c32a536a
我需要像“选择客户A、客户B、客户C……”这样的东西。。。。。。。。桌上的观众

我需要的结果如下:

它可以将所有内容导出到excel并在那里进行操作


谢谢

一个选项是pivot查询,使用
行号
为每个客户的每个GUID分配任意位置。我们可以使用三个单独的CTE来实现这一点,您的数据集中的三个客户各有一个CTE:

WITH cteA AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) rn
    FROM yourTable
    WHERE Customer = 'Customer A'
),
cteB AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) rn
    FROM yourTable
    WHERE Customer = 'Customer B'
),
cteC AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) rn
    FROM yourTable
    WHERE Customer = 'Customer C'
)

SELECT
    a.Audience,
    b.Audience,
    c.Audience
FROM cteA a
FULL OUTER JOIN cteB b
    ON a.rn = b.rn
FULL OUTER JOIN cteC c
    ON a.rn = c.rn AND b.rn = c.rn;


搜索此数据透视检查此表始终只有3个客户?不,它有200多个客户和近2万名观众。是否有一种方法可以在不实际键入每个客户的情况下遍历所有客户?它让客户望而生畏……问题是,您的预期输出并不是真正相关的。我不知道如何在不使用存储过程的情况下执行您想要的操作。