我将MS-Access 2003与查询创建者一起使用。我从一个表(FaitsSaillants
)中选择所有内容,然后从另一个表(WHERE VARIABLE='TitreMandat'
)中选择一个特定行(tb_SOMMAIRE
)。我想从第二个表中选择另一行并连接它。
PARAMETERS
[CurrAxe] Text ( 255 ), [CurrOTP] Text ( 255 ),
[CurrClient] Text ( 255 ), [StartDate] DateTime, [EndDate] DateTime;
SELECT
tb_SOMMAIRE.Valeur AS Projet, tb_SOMMAIRE.VARIABLE, *
FROM
(FaitsSaillants
LEFT JOIN Employes
ON FaitsSaillants.Utilisateur = Employes.CIP)
INNER JOIN tb_SOMMAIRE
ON FaitsSaillants.OTP = tb_SOMMAIRE.OTP
WHERE
(((FaitsSaillants.OTP)=[CurrOTP]) AND
((FaitsSaillants.Client) Like [CurrClient]) AND
((FaitsSaillants.Axe) Like [CurrAxe]) AND
((DateValue([DateInsertion]))>=[StartDate] AND
(DateValue([DateInsertion]))<=[EndDate]) AND
((tb_SOMMAIRE.VARIABLE)='TitreMandat'))
ORDER BY
FaitsSaillants.DateInsertion DESC;
此查询会添加ID(tb_SOMMAIRE.Valeur
字段)匹配的OTP
字段和tb_SOMMAIRE.VARIABLE='TitreMandat'
。它就像一个魅力。但是,我想在tb_SOMMAIRE
结果中添加另一行。我想得到VARIABLE='TitreMandat'
(该部分实际工作)和VARIABLE='NomInstallation'
行的行。我会得到2行,当我要求Projet
(tb_SOMMAIRE.Value as Projet
)时,我想要连接并显示这两行。这两行都是&#39; OTP
(ID)与FaitsSaillants
中选择的内容相同。
很抱歉,如果它是法语。
FaitsSaillants
Index AutoNumber Projet Text Axe Text Client Text OTP Text FaitSaillant Memo DateInsertion Date Utilisateur Text
tb_SOMMAIRE
OTP Text VARIABLE Text Valeur Text
tb_SOMMAIRE
OTP VARIABLE Valeur UGPSW NomInstallation PosteNemiscau UGPSW TitreMandat oscilloperturbographe UGPSW RespIng CU9656 GWIHK NomInstallation AnotherInstallation GWIHK TitreMandat Anytitle GWIHK Responsable ImportantPerson
答案 0 :(得分:1)
怎么样:
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;
最好避免将所有字段引用为*。字段(列)应按名称列出。
以上内容取决于创建一个派生表,该表将来自tb_sommaire的行分组为Otp。您可以将派生表剪切并粘贴到查询设计屏幕(sql视图)中,以检查返回的行是否符合预期。