SQL上的SQL数据透视表用于字符串

时间:2014-12-19 15:45:17

标签: sql string tsql pivot

尝试使用Pivot操作某些SQL,但我需要关注的是文本,我不能让它工作。

customerID  appointment             appointmentNumber   treatment
9           2014-01-09 09:30:00.000 1                   Osteo F 45
9           2014-01-20 09:00:00.000 2                   Osteo F 45
9           2014-01-30 09:30:00.000 3                   Osteo F 45
9           2014-02-10 09:00:00.000 4                   Osteo F 45

我需要的是改变列" appointmentNumber"进入列标题,使用"处理"如下所示...

customerID 1 2 3 4 etc...

我一直在字符串上使用Pivot表来表示过去的数字(总和,计数),而不是字符串的数字,所以我有点迷失。

我查看了SQL Pivot with String,但似乎无法将此应用于我自己的代码。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以选择字符串列的最大/最小聚合函数。在这种情况下,我假设为appointmentNumber,customerId是唯一的,因此除了获取第一个值之外,聚合函数并没有真正做任何事情。

select
    *
from
    table t
    pivot (
        max(treatment)
        for appointmentNumber in ([1],[2],[3],[4],[5])
    ) p

答案 1 :(得分:0)

您可以对max()使用条件聚合:

select customerId,
       max(case when appointmentnumber = 1 then treatement end) as an_1,
       max(case when appointmentnumber = 2 then treatement end) as an_2,
       max(case when appointmentnumber = 3 then treatement end) as an_3,
       max(case when appointmentnumber = 4 then treatement end) as an_4,
       max(case when appointmentnumber = 5 then treatement end) as an_5
from table t
group by customerid;

如果您愿意,也可以使用pivot执行此操作。 max()可以正常使用字符串变量。