簡體   English   中英

從單列中選擇多個值

[英]Select Multiple values from single Column

如果整天都在這個查詢上,我似乎無法解決這個問題。 如果也許您可以為我指明正確的方向,或者告訴我我想尋找什么功能,那將意味着很多。 我嘗試過查看SQL中的Pivot,Case,Union和Group by函數,但是沒有運氣……但是看起來太簡單了

我從多個表中選擇。 該表之一包含一行,其中包含我需要在選擇中返回的多個值。

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

我可以使用哪種功能或選擇類型?

我仍在努力,但我想說的第一件事是,在這種情況下,您無需繼續使用UNION ALL(除非我錯過了一些事情)...只使用一個SELECT查詢(不並更改WHERE子句,如下所示:

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

先嘗試一下,看看會得到什么...然后告訴我們

編輯

根據您在給定鏈接上發布的屏幕截圖(使問題更容易發現),我可以看到您需要使用DISTINCT關鍵字。 基本上:SELECT DISTINCT等...

@Matt只需使用DISTINCT即可返回與以前相同的結果。 這是因為我從另一個表中選擇了3個“ CustomFieldId”列,而不是我選擇的“ IssueId”列。 但是,當我在選擇中使用子查詢時,我會得到想要的結果。

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

我怎么需要顯示所有數據而不僅僅是一個ID。

我確實通過在3個不同的臨時表中選擇“ CustomFieldId”來解決此問題,然后通過最終選擇將所有表組合在一起……這恰好返回了我想要的結果:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM