2015-12-30 44 views
0

我不知道我怎样才能取一个数据集,看起来像这样:合并重复的行成1行多列

表1:

RecordID Code 
A 351 
A 352 
A 353 
A 354 

看起来像这样:

表2:

你已经可以假设我创建了第二个表格,其中包含我在下面创建的列标题

RecordID 351 352 353 354 355 356 
    A   Y Y Y Y N N 

非常感谢您的帮助。

+0

这RDBMS是这个呢?请添加一个标签来指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 或者其他的东西。 –

+0

我正在使用SQLServer 2012 – WillT2118

回答

0

你可以尝试这样的事:

select 
    RecordID, 
    iif(sum(iif([Code]=351,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=352,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=353,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=354,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=355,1,0))>0,'Y','N'), 
    iif(sum(iif([Code]=356,1,0))>0,'Y','N') 
from table 
group by RecordID 
+1

这是一个有趣的做法。为什么不使用'max(当代码= 351时的情况,然后'Y'else'N'结束)' – Lock

+0

@Lock在这种情况下,我们将取决于ascii代码的顺序,如果我们需要本地化或使用其他符号呢? –

+1

@Lashlane。不知道我看到本地化与此有关吗?不要误解我的意思..我不是说你的错误..只是从来没有见过这样做,对我而言,意图不明确。你能解释这是如何影响ascii代码的顺序的吗? – Lock

1
SELECT RecordID, 
    CASE WHEN SUM(CASE WHEN Code = 351 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [351], 
    CASE WHEN SUM(CASE WHEN Code = 352 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [352], 
    CASE WHEN SUM(CASE WHEN Code = 353 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [353], 
    CASE WHEN SUM(CASE WHEN Code = 354 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [354], 
    CASE WHEN SUM(CASE WHEN Code = 355 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [355], 
    CASE WHEN SUM(CASE WHEN Code = 356 THEN 1 ELSE 0 END) = 1 THEN 'Y' ELSE 'N' AS [356] 
FROM yourTable 
GROUP BY RecordID 
+0

谢谢你们!这是有道理的,应该工作,生病给它一个镜头。 – WillT2118