简体   繁体   中英

Select Multiple values from single Column

If been on this query for an entire day now and I just can't seem to get my head around it. If maybe you can just point me in the correct directions or tell me what function I'm suppose to be looking for that would mean a great deal. I've tried looking at Pivot, Case, Union and Group by functions in SQL but no luck… yet it looks soo simple

I'm selecting from multiple tables. One of the table contains a row with the multiple values I need to return in my select.

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

Result:

IssueId  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

The Bold columns is giving me trouble.

I would like the select to do return the following:

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

What function or type of select can I use?

I'm still working on it, but the first thing I would say that is useful here is you don't need to keep using UNION ALL in thsi case (unless I have missed something)... just use one SELECT query (no unions) and change the WHERE clause to look like this:

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

Try that first and see what you get... then tell us

EDIT

Based on the screenshots you posted on the given link (which have made the problem much easier to see), I can see you need to use the DISTINCT keyword. Basically: SELECT DISTINCT etc...

@Matt Simply using DISTINCT returns the same result as before. This is because I'm selecting "CustomFieldId" column 3 times from a different table than "IssueId" in my select. But when I use a sub query in the select then i get the result i want.

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

How ever i need to display all data and not just one ID.

I did Resolve this issue by selecting the "CustomFieldId" into 3 different temp tables and then with the final select i combine all tables... This returned exactly what i want :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM