Объединить 2 строки в сложном запросе SQL

Я использую 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]))
 Laurence31 окт. 2012 г., 14:29
Показать пример данных и пример результатов

Ответы на вопрос(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), чтобы убедиться, что возвращаемые строки соответствуют ожидаемым.

 Fionnuala31 окт. 2012 г., 15:14
 Fionnuala31 окт. 2012 г., 15:07
Пожалуйста, опубликуйте пример данных из tb_sommaire.
 dnLL31 окт. 2012 г., 14:47
Еще одно сообщение об ошибке. Это's по-французски, но в основном он говорит, что синтаксис неправильный или слишком сложный для оценки. Предлагает назначитьчасти впеременные, Тем не менее, запрос, кажется, правильно отображается в окне дизайна, это 'когда этоs выполнено, что я получаю сообщение об ошибке. Кстати, спасибо за помощь, очень ценю.
 dnLL31 окт. 2012 г., 15:15
Я добавил некоторые данные из tb_SOMMAIRE, я вырезал некоторые строки полезности, очевидно. Вы можете увидеть данные для двух разных OTP с двумя конкретными строками, которые я хочу объединить, и другой случайной строкой.
 dnLL01 нояб. 2012 г., 13:54
Это просто работает. И, наконец, конкатенация в самом SQL. Вау, большое спасибо. Использовали ли вы окно конструктора запросов для этого?
 dnLL31 окт. 2012 г., 14:40
Даже если есть только 5 параметров, я получил сообщение о том, что мне нужно ввести 6. 6-й параметр - это q.value ???
 Fionnuala31 окт. 2012 г., 14:52
Это другая проблема. Faitssaillants - это таблица или запрос? Если это вопрос, который может быть проблемой, и вам нужно будет опубликовать sql. Если нет, вам нужно будет включить больше информации о ваших структурах таблиц и данных в ваш вопрос.
 dnLL31 окт. 2012 г., 15:05
Нету. Он говорит, что данные несовместимы с критериями, и затем Access указывает на поле OTP.
 dnLL31 окт. 2012 г., 14:58
Это'В таблице я добавил некоторую информацию в свой оригинальный пост.
 Fionnuala31 окт. 2012 г., 15:10
Хорошо, пожалуйста, опубликуйте несколько примеров данных для переменных NomInstallation и TitreMandat, включая otp, variable и value. (Кстати, это звучит как хороший дизайн.)
 dnLL01 нояб. 2012 г., 14:15
Впервые слышу о концепциипроизводная таблица, Еще раз спасибо, я смогу многое сделать из этого одного сложного запроса.
 Fionnuala01 нояб. 2012 г., 14:07
Нет. На каком-то этапе вы должны двигаться дальше, однако вы можете ссылаться на запрос в окне конструктора запросов, чтобы вы могли создать его с помощью трех запросов, созданных в окне конструктора запросов. Это не худший способ получить представление о SQL. Когда у вас есть три запроса, вы можете начать заменять имя запроса на SQL для создания производной таблицы.
 Fionnuala31 окт. 2012 г., 15:04
Что такое valeur и почему это текст? Какие данные он содержит?
 dnLL31 окт. 2012 г., 15:08
Ну, я не имеюЯ создал эту структуру, мне просто нужно поработать с ней, но в основном вместо 50 столбцов в tb_SOMMAIRE есть столбец для переменных и еще один для значений. OTP - это идентификаторы, поэтому для идентификатора у меня может быть 20-30 переменных и значение для каждой.

Ваш ответ на вопрос