0

これは、前の質問のフォローアップです。複雑なSQLクエリで2行を連結します

これが私がこの質問から得たものです:

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; 

'TitreMandat'または'NomInstallation'の代わりに[variable]='somethingelse'を使用して別の行(s3という名前を付けましょう)を追加したい場合はどうなりますか?すべてのtb_sommaire.variableをフィールドとして取得し、tb_sommaire.valeurを値として取得することは可能でしょうか(tb_sommaire.otp = faitssaillants.otp)。それはおそらく私の将来の問題も解決するでしょう。

4

1 に答える 1

0

クロス集計を含む2つのクエリで最初の解決策を実行します。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このクエリに条件を追加できます。

2番目のクエリ、クロス集計のクエリ:

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

于 2012-11-15T16:36:10.613 に答える