2012-11-15 24 views
0

這是我之前的問題Concatenate 2 rows in a complex SQL query的後續行爲。從多個Access-SQL行到一行

以下是我從這個問題了:

PARAMETERS [CurrAxe] TEXT (255), [CurrOTP] TEXT (255), [CurrClient] TEXT (
255), [StartDate] DATETIME, [EndDate] DATETIME; 

SELECT q.Projet, * 
FROM (faitssaillants f 
LEFT JOIN employes e 
ON f.utilisateur = e.cip) 
INNER JOIN (
SELECT s1.otp, 
    [s1].[valeur] & "," & [s2].[valeur] AS Projet 
FROM (
    SELECT otp, valeur 
    FROM tb_sommaire 
    WHERE [variable] = 'TitreMandat') AS s1 
INNER JOIN (
    SELECT otp, valeur 
    FROM tb_sommaire 
    WHERE [variable] = 'NomInstallation') AS s2 
ON s1.otp = s2.otp) q 
ON f.otp = q.otp 
WHERE f.otp = [currotp] 
AND f.client LIKE [currclient] 
AND f.axe LIKE [curraxe] 
AND Datevalue([dateinsertion]) 
    Between [startdate] And [enddate] 
ORDER BY f.dateinsertion DESC; 

如果我想補充另一行(我們將其命名爲S3)用的,而不是「TitreMandat」 [變量] =「別的東西」或'NomInstallation'?將所有tb_sommaire.variable作爲字段並將tb_sommaire.valeur作爲tb_sommaire.otp = faitssaillants.otp的值是否可能?它可能也會解決我未來的問題。

回答

0

我會在包括交叉表在內的兩個查詢中執行您的第一個解決方案。首先查詢命名qry1 SQL:

SELECT 
    f.index, f.project, f.axe, f.client, f.otp, s.variable, s.valeur, 
    f.FaitSaillant, f.dateInsertion, f.Utilisateur, e.empname 
FROM 
    (FaitsSaillants AS f INNER JOIN 
    tb_SOMMAIRE AS s ON 
    f.otp = s.otp) LEFT JOIN 
    employes AS e ON 
    f.Utilisateur = e.cip; 

您可以添加您WHERE標準來此查詢。

第二查詢,交叉表之一:

TRANSFORM First(qry1.valeur) AS FirstOfvaleur 
SELECT qry1.index, qry1.project, qry1.axe, qry1.client, qry1.otp 
FROM qry1 
GROUP BY qry1.index, qry1.project, qry1.axe, qry1.client, qry1.otp 
PIVOT qry1.variable; 

,那麼你可以連接的valeur S代表每個variable

+0

我要讀多一點關於改造和支點。我還無法測試,但謝謝。 – dnLL

+0

我總是使用交叉表嚮導,然後對其進行修改 – Beth