[英]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.