选择多个列以在sql中查询

时间:2014-07-03 10:27:23

标签: sql select pivot

我遇到了一些麻烦,可能来自我对SQL的理解。这是我目前使用的SQL:

CREATE TEMPORARY TABLE Temp 
(
    sPropertyCode VARCHAR(9), 
    sDataDate DATE, 
    PRIMARY KEY (sPropertyCode)
);

INSERT IGNORE Temp (sPropertyCode, sDataDate) 
SELECT sPropertyCode, sDataDate 
FROM tasks as t, task_data AS d 
WHERE t.iTaskId = d.iTaskId 
AND iRemoved = 1 
AND sDataType = 'sAgencyAgreementDate' 
AND iBusinessStreamId = 9;

SELECT t.sPropertyCode, sDataDate, SFirstSeen, sTaskType 
FROM tasks AS t, temp AS a 
WHERE iRemoved = 1 
AND iBusinessStreamId = 9 
AND sTaskType IN ('RF', 'IF', 'CM') 
AND t.sPropertyCode = a.sPropertyCode 
ORDER BY sPropertyCode, sFirstSeen;

DROP TABLE Temp;

所以参考文献' RF',' IF'和' CM'是我们收到的任务。每个属性代码只能触摸一次这些任务中的每一个。我想显示属性代码触及其中每一个的日期。它目前正在工作,但它在三列中显示,任务类型在一列中。我希望每个任务都显示在一个单独的列中,并在其相应的列中首次显示该日期。

因此,从下面的图片可以看出它是如何使用上面的代码进行布局的。

enter image description here

以下是我希望它的外观,而不是显示在一边的任务,我希望他们在列中显示具有自己特定日期的内容

enter image description here

提前谢谢你:)

2 个答案:

答案 0 :(得分:0)

SELECT t.sPropertyCode, sDataDate, SFirstSeen, a1.sTaskType, a2.sTaskType, a3.sTaskType
FROM tasks AS t
INNER JOIN temp AS a1 on t.sPropertyCode = a1.sPropertyCode and a1.sTaskType = 'RF'
INNER JOIN temp as a2 on t.sPropertyCode = a2.sPropertyCode and a2.sTaskType = 'IF'
INNER JOIN temp as a3 on t.sPropertyCode = a3.sPropertyCode and a3.sTaskType = 'CM' 
WHERE iRemoved = 1 AND iBusinessStreamId = 9
ORDER BY sPropertyCode, sFirstSeen;

如果并非总是拥有全部3种测试类型,也可以使用外连接。

答案 1 :(得分:-1)

5-col表中任何行的CM,IF和RF列之间的含义有何不同?它们在您列出的示例中始终是相同的值。