2013-03-21 5 views
0

Мне было интересно, если вы, ребята, могли бы помочь мне упростить запросы ниже в одном одном запросе.Упрощение SQL-запроса с несколькими столбцами

У меня есть 10 запросов, как показано ниже. Единственное различие между всеми ними поле «Исходящие задачи», который начинается с 1 и продолжается до 10.

SELECT 
S1.[Main Project] AS Company, 
S1.[Main Link] AS Project, 
S1.[Name] AS Milestone, 
S1.[Start] AS MilestoneDueDate, 
S2.[Name] AS Successor, 
S2.[Start] AS SuccessorDueDate 

FROM Sheet1 AS S1 INNER JOIN Sheet1 AS S2 ON S1.[Outcoming Task 1] = S2.[ID] 

WHERE 
S1.Start >S2.[Start] AND 
S1.[%compl#] <> 100 AND 
(S1.[Task class] <> '***Sammelvorgang' AND S1.[Task class] <> '' AND S1.[Task class] <> 'M D-Muster') AND 
(S2.[Task class] <> '***Sammelvorgang' AND S2.[Task class] <> '' AND S2.[Task class] <> 'M D-Muster') 

ORDER BY 
S1.[Main Project], 
S1.[Main Link], 
S1.[Name]; 

Причины я создал это потому, что АБД вместо создания таблицы для связи между задачами, имеет создал 10 таких полей, как «Исходящая задача 1», «Исходящая задача 2» и «Исходящая задача 3» ...

Можно ли объединить все запросы в одном? Не могли бы вы, ребята, дать мне совет о том, как это сделать?

INFO: MS-ACCESS 2010

Спасибо,

ответ

0

Попробуйте что-то вроде ниже запроса. Я также думаю, что пробелы в имени столбца на самом деле не являются лучшей практикой.

SELECT 
    S1.[Main Project] AS Company, 
    S1.[Main Link] AS Project, 
    S1.[Name] AS Milestone, 
    S1.[Start] AS MilestoneDueDate, 
    S2.[Name] AS Successor_Task1, 
    S2.[Start] AS SuccessorDueDate_Task1, 

    S3.[Name] AS Successor_Task2, 
    S3.[Start] AS SuccessorDueDate_Task2, 

    ... 3, 4, 5, 6, 7, 8, 9, 10 ... 

FROM 
    Sheet1 AS S1 
    LEFT JOIN Sheet1 AS S2 
     ON S1.[Outcoming Task 1] = S2.[ID] 

    LEFT JOIN Sheet1 AS S3 
     ON S1.[Outcoming Task 2] = S3.[ID] 

    ... 3, 4, 5, 6, 7, 8, 9, 10 ... 

WHERE 
    S1.Start >S2.[Start] AND 
    S1.[%compl#] <> 100 AND 
    (S1.[Task class] <> '***Sammelvorgang' AND S1.[Task class] <> '' AND S1.[Task class] <> 'M D-Muster') AND 
    (S2.[Task class] <> '***Sammelvorgang' AND S2.[Task class] <> '' AND S2.[Task class] <> 'M D-Muster') AND 

    (S3.[Task class] <> '***Sammelvorgang' AND S3.[Task class] <> '' AND S3.[Task class] <> 'M D-Muster') 

    ... 3, 4, 5, 6, 7, 8, 9, 10 ... 

ORDER BY 
    S1.[Main Project], 
    S1.[Main Link], 
    S1.[Name]; 
0

Возможно, вам нужен запрос UNION. Вот простой пример:

Скажем, у вас есть две таблицы

[Table1]
[ID] AutoNumber
[Исходящие Целевую 1] Числовой (Long Integer)
[Исходящие задачи 2] Числовой (Long Integer)

с данными

ID Outcoming Task 1 Outcoming Task 2 
-- ---------------- ---------------- 
1 1     2 
2 1     3 

[Задачи]
[ID] AutoNumber
[имя_задания] Текст (255)

с данными

ID TaskName 
-- -------- 
1 Task1 
2 Task2 
3 Task3 

Запрос

SELECT t1.[ID], 1 AS [Outcoming Task], t.[TaskName] 
FROM [Table1] t1 INNER JOIN [Tasks] t ON t.[ID] = t1.[Outcoming Task 1] 
UNION 
SELECT t1.[ID], 2 AS [Outcoming Task], t.[TaskName] 
FROM [Table1] t1 INNER JOIN [Tasks] t ON t.[ID] = t1.[Outcoming Task 2] 

будет производить

ID Outcoming Task TaskName 
-- -------------- -------- 
1 1    Task1 
1 2    Task2 
2 1    Task1 
2 2    Task3 
Смежные вопросы