2013-03-15 6 views
0

Если бы по этому запросу в течение целого дня теперь, и я просто не могу показаться, чтобы его обнимала. Если возможно, вы можете просто указать мне правильные направления или сказать мне, какую функцию я должен искать, это значило бы много. Я пробовал смотреть на Pivot, Case, Union и Group по функциям в SQL, но не повезло ... все же выглядит очень простоВыберите несколько значений из одной колонки Столбец

Я выбираю из нескольких таблиц. Одна из таблиц содержит строку с несколькими значениями, которые мне нужно вернуть в моем выборе.

SQL:

(SELECT  ONYAK_SIGMAPRO_Issues.IssueId, 
          ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue AS [Work Ticket], 
          ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue AS [Customer Name], 
          ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue AS [Job Description], 
          ONYAK_SIGMAPRO_ProjectCategories.CategoryName AS [Printer], 
          ONYAK_SIGMAPRO_Issues.IssueTitle AS [Task Description], 
       ONYAK_SIGMAPRO_Issues.Progress, 
          ONYAK_SIGMAPRO_ProjectStatus.StatusName AS [Status], 
          ONYAK_SIGMAPRO_ProjectPriorities.PriorityName AS [Priority], 
       ONYAK_SIGMAPRO_Issues.DateDue 
FROM   (ONYAK_SIGMAPRO_Issues INNER JOIN 
         ONYAK_SIGMAPRO_ProjectCustomFieldValues ON ONYAK_SIGMAPRO_Issues.IssueId = ONYAK_SIGMAPRO_ProjectCustomFieldValues.IssueId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectCustomFields ON 
         ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldId = ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId AND 
         ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectCustomFields.ProjectId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectStatus ON ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectStatus.ProjectId AND 
         ONYAK_SIGMAPRO_Issues.IssueStatusId = ONYAK_SIGMAPRO_ProjectStatus.StatusId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectPriorities ON ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectPriorities.ProjectId AND 
         ONYAK_SIGMAPRO_Issues.IssuePriorityId = ONYAK_SIGMAPRO_ProjectPriorities.PriorityId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectCategories ON ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectCategories.ProjectId AND 
         ONYAK_SIGMAPRO_Issues.IssueCategoryId = ONYAK_SIGMAPRO_ProjectCategories.CategoryId 
             ) 
WHERE  ONYAK_SIGMAPRO_Issues.ProjectId = 2 
AND ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId = 1 

UNION all 

SELECT  ONYAK_SIGMAPRO_Issues.IssueId, 
          ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue AS [Work Ticket], 
          ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue AS [Customer Name], 
          ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue AS [Job Description], 
          ONYAK_SIGMAPRO_ProjectCategories.CategoryName AS [Printer], 
          ONYAK_SIGMAPRO_Issues.IssueTitle AS [Task Description], 
       ONYAK_SIGMAPRO_Issues.Progress, 
          ONYAK_SIGMAPRO_ProjectStatus.StatusName AS [Status], 
          ONYAK_SIGMAPRO_ProjectPriorities.PriorityName AS [Priority], 
       ONYAK_SIGMAPRO_Issues.DateDue 
FROM   ONYAK_SIGMAPRO_Issues INNER JOIN 
         ONYAK_SIGMAPRO_ProjectCustomFieldValues ON ONYAK_SIGMAPRO_Issues.IssueId = ONYAK_SIGMAPRO_ProjectCustomFieldValues.IssueId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectCustomFields ON 
         ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldId = ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId AND 
         ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectCustomFields.ProjectId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectStatus ON ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectStatus.ProjectId AND 
         ONYAK_SIGMAPRO_Issues.IssueStatusId = ONYAK_SIGMAPRO_ProjectStatus.StatusId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectPriorities ON ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectPriorities.ProjectId AND 
         ONYAK_SIGMAPRO_Issues.IssuePriorityId = ONYAK_SIGMAPRO_ProjectPriorities.PriorityId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectCategories ON ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectCategories.ProjectId AND 
         ONYAK_SIGMAPRO_Issues.IssueCategoryId = ONYAK_SIGMAPRO_ProjectCategories.CategoryId 
WHERE  ONYAK_SIGMAPRO_Issues.ProjectId = 2 
AND ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId = 4 

UNION all 

SELECT  ONYAK_SIGMAPRO_Issues.IssueId, 
          ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue AS [Work Ticket], 
          ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue AS [Customer Name], 
          ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue AS [Job Description], 
          ONYAK_SIGMAPRO_ProjectCategories.CategoryName AS [Printer], 
          ONYAK_SIGMAPRO_Issues.IssueTitle AS [Task Description], 
       ONYAK_SIGMAPRO_Issues.Progress, 
          ONYAK_SIGMAPRO_ProjectStatus.StatusName AS [Status], 
          ONYAK_SIGMAPRO_ProjectPriorities.PriorityName AS [Priority], 
       ONYAK_SIGMAPRO_Issues.DateDue 
FROM   ONYAK_SIGMAPRO_Issues INNER JOIN 
         ONYAK_SIGMAPRO_ProjectCustomFieldValues ON ONYAK_SIGMAPRO_Issues.IssueId = ONYAK_SIGMAPRO_ProjectCustomFieldValues.IssueId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectCustomFields ON 
         ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldId = ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId AND 
         ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectCustomFields.ProjectId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectStatus ON ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectStatus.ProjectId AND 
         ONYAK_SIGMAPRO_Issues.IssueStatusId = ONYAK_SIGMAPRO_ProjectStatus.StatusId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectPriorities ON ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectPriorities.ProjectId AND 
         ONYAK_SIGMAPRO_Issues.IssuePriorityId = ONYAK_SIGMAPRO_ProjectPriorities.PriorityId INNER JOIN 
         ONYAK_SIGMAPRO_ProjectCategories ON ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectCategories.ProjectId AND 
         ONYAK_SIGMAPRO_Issues.IssueCategoryId = ONYAK_SIGMAPRO_ProjectCategories.CategoryId 
WHERE  ONYAK_SIGMAPRO_Issues.ProjectId = 2 
AND ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId = 9) 
ORDER BY ONYAK_SIGMAPRO_Issues.IssueId 

Результат:

 
IssueId Work Ticket Customer Name Job Description Printer Task Description Progress Status Priority DateDue 
1070 8828 8828 8828 Heidelberg brochure 0 Art Work High 00:00.0 
1070 brochures brochures brochures Heidelberg brochure 0 Art Work High 00:00.0 
1070 Liberty Life Liberty Life Liberty Life Heidelberg brochure 0 Art Work High 00:00.0 
1082 Liberty Life Liberty Life Liberty Life Heidelberg (brochures 0 Art Work High 00:00.0 
1082 brochures brochures brochures Heidelberg (brochures 0 Art Work High 00:00.0 
1082 8294 8294 8294 Heidelberg (brochures 0 Art Work High 00:00.0 
1086 8295 8295 8295 Heidelberg (brochures 0 Art Work High 00:00.0 
1086 stable growth brochures  stable growth brochures  stable growth brochures  Heidelberg (brochures 0 Art Work High 00:00.0 
1086 Liberty Life Liberty Life Liberty Life Heidelberg (brochures 0 Art Work High 00:00.0 
1090 Liberty Life Liberty Life Liberty Life Kamori (VAS Card 0 Art Work High 00:00.0 
1090 VAS cards VAS cards VAS cards Kamori (VAS Card 0 Art Work High 00:00.0 
1090 8296 8296 8296 Kamori (VAS Card 0 Art Work High 00:00.0 
1104 8300 8300 8300 Heidelberg Menu text 0 Art Work High 00:00.0 
1104 menu text menu text menu text Heidelberg Menu text 0 Art Work High 00:00.0 
1104 South African Airways South African Airways South African Airways Heidelberg Menu text 0 Art Work High 00:00.0 

Смелые колонны дают мне неприятность.

Я хотел бы, чтобы выбрать, чтобы сделать возвращать следующее:

 
IssueId Work Ticket Customer Name Job Description Printer Task Description Progress Status Priority DateDue 
1070 8828 Liberty Life brochures Heidelberg brochure 0 Art Work High 00:00.0 
1082 8294 8294 brochures Heidelberg (brochures 0 Art Work High 00:00.0 
1086 8295 Liberty Life Liberty Life Heidelberg (brochures 0 Art Work High 00:00.0 
1090 8296 Liberty Life VAS cards Kamori (VAS Card 0 Art Work High 00:00.0 
1104 8300 South African Airways menu text Heidelberg Menu text 0 Art Work High 00:00.0 

Какую функцию или тип выбора можно использовать?

+2

Ваш Sql и ваши результаты оба довольно большие и нечитаемые. Можете ли вы опубликовать более простой пример или объяснить более кратко то, что вы пытаетесь сделать. Ваше описание подсказывает, что вы хотите вернуть два значения в своем результате на основе одного столбца в таблице - это правильно? –

+0

Для ваших результатов ... он может быть более разборчивым, если вы разместите скриншот, а не весь текст. Кроме того, для части запроса .. можно удалить любые соединения/столбцы из запроса, который не нужен? Это поможет нам сосредоточиться на проблеме. – Matt

+0

вам нужно сделать группу IssueId в конце, bdw все три рабочих билета, имя клиента, описание работы одинаковы ... т. Е.CustomFieldValue –

ответ

0

Я все еще работаю над этим, но первое, что я бы сказал, полезен здесь, вам не нужно продолжать использовать UNION ALL в этом случае (если я не пропустил что-то) ... просто используйте один ВЫБРАТЬ запрос (объединения) и изменить ИНЕКЕ выглядеть следующим образом:

WHERE ONYAK_SIGMAPRO_Issues.ProjectId = 2 
AND ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId IN (1,4,9) 

Попробуйте это первый и посмотреть, что получится ... тогда скажите нам

EDIT

основе скриншоты, которые вы опубликовали на данной ссылке (whi ch сделали проблему намного легче увидеть), я вижу, вам нужно использовать ключевое слово DISTINCT. В основном: SELECT DISTINCT и т. Д.

+0

Thx для ответа Мэтт, вы правильно используете функцию IN. этот запрос возвращает тот же результат, что и запрос UNION ALL. – Heinrich

+0

@ user2173521 Добро пожаловать. У вас была еще одна удача? эта проблема довольно сложна для нас, как раз из информации, приведенной в сообщении. Мое предложение - вы найдете кого-то хорошего с SQL, который может сесть рядом с вами и работать над этим лично. – Matt

+0

Привет, Мэтт, я использовал все ресурсы, которые я мог найти для меня, и до сих пор не повезло. Нужно ли мне предоставлять больше информации, чтобы вы могли помочь? я не могу добавить изображения в stackoferflow, другие мудрые, я мог бы предоставить вам более четкое представление о моей проблеме ?! – Heinrich

0

@Matt Простое использование DISTINCT возвращает тот же результат, что и раньше. Это потому, что я выбираю столбец «CustomFieldId» 3 раза из другой таблицы, чем «IssueId» в моем выборе. Но когда я использую sub-запрос в select, я получаю результат, который я хочу.

SELECT DISTINCT(ONYAK_SIGMAPRO_Issues.IssueId), 
    (SELECT ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue 
    FROM ONYAK_SIGMAPRO_ProjectCustomFieldValues INNER JOIN 
     ONYAK_SIGMAPRO_Issues ON ONYAK_SIGMAPRO_ProjectCustomFieldValues.IssueId = ONYAK_SIGMAPRO_Issues.IssueId INNER JOIN 
     ONYAK_SIGMAPRO_ProjectCustomFields ON 
     ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldId = ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId 
      WHERE (ONYAK_SIGMAPRO_Issues.ProjectId = 2) AND (ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId = 1) AND ONYAK_SIGMAPRO_Issues.IssueId = 1070) AS [Work Ticket], 
    (SELECT ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue 
    FROM ONYAK_SIGMAPRO_ProjectCustomFieldValues INNER JOIN 
     ONYAK_SIGMAPRO_Issues ON ONYAK_SIGMAPRO_ProjectCustomFieldValues.IssueId = ONYAK_SIGMAPRO_Issues.IssueId INNER JOIN 
     ONYAK_SIGMAPRO_ProjectCustomFields ON 
     ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldId = ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId 
      WHERE (ONYAK_SIGMAPRO_Issues.ProjectId = 2) AND (ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId = 4) AND ONYAK_SIGMAPRO_Issues.IssueId = 1070) AS [Customer Name], 
    (SELECT ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldValue 
    FROM ONYAK_SIGMAPRO_ProjectCustomFieldValues INNER JOIN 
     ONYAK_SIGMAPRO_Issues ON ONYAK_SIGMAPRO_ProjectCustomFieldValues.IssueId = ONYAK_SIGMAPRO_Issues.IssueId INNER JOIN 
     ONYAK_SIGMAPRO_ProjectCustomFields ON 
     ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldId = ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId 
      WHERE (ONYAK_SIGMAPRO_Issues.ProjectId = 2) AND (ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId = 9) AND ONYAK_SIGMAPRO_Issues.IssueId = 1070) AS [Job Description], 
    ONYAK_SIGMAPRO_ProjectCategories.CategoryName AS [Printer], 
    ONYAK_SIGMAPRO_Issues.IssueTitle AS [Task Description], 
    ONYAK_SIGMAPRO_Issues.Progress, 
    ONYAK_SIGMAPRO_ProjectStatus.StatusName AS [Status], 
    ONYAK_SIGMAPRO_ProjectPriorities.PriorityName AS [Priority], 
    ONYAK_SIGMAPRO_Issues.DateDue 
     FROM ONYAK_SIGMAPRO_Issues INNER JOIN 
     ONYAK_SIGMAPRO_ProjectCustomFieldValues ON 
     ONYAK_SIGMAPRO_Issues.IssueId = ONYAK_SIGMAPRO_ProjectCustomFieldValues.IssueId INNER JOIN 
     ONYAK_SIGMAPRO_ProjectCustomFields ON 
     ONYAK_SIGMAPRO_ProjectCustomFieldValues.CustomFieldId = ONYAK_SIGMAPRO_ProjectCustomFields.CustomFieldId AND 
     ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectCustomFields.ProjectId INNER JOIN 
     ONYAK_SIGMAPRO_ProjectStatus ON 
     ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectStatus.ProjectId AND 
     ONYAK_SIGMAPRO_Issues.IssueStatusId = ONYAK_SIGMAPRO_ProjectStatus.StatusId INNER JOIN 
     ONYAK_SIGMAPRO_ProjectPriorities ON 
     ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectPriorities.ProjectId AND 
     ONYAK_SIGMAPRO_Issues.IssuePriorityId = ONYAK_SIGMAPRO_ProjectPriorities.PriorityId INNER JOIN 
     ONYAK_SIGMAPRO_ProjectCategories ON 
     ONYAK_SIGMAPRO_Issues.ProjectId = ONYAK_SIGMAPRO_ProjectCategories.ProjectId AND 
     ONYAK_SIGMAPRO_Issues.IssueCategoryId = ONYAK_SIGMAPRO_ProjectCategories.CategoryId 
      WHERE ONYAK_SIGMAPRO_Issues.ProjectId = 2 
      AND ONYAK_SIGMAPRO_Issues.IssueId = 1070 

Как всегда мне нужно отображать все данные, а не только один идентификатор.

я решить эту проблему, выбрав «CustomFieldId» в 3-х различных временных таблицах, а затем окончательный выбор я объединить все таблицы ... Возвращаемый именно то, что я хочу :)

Смежные вопросы