简体   繁体   English

从单列中选择多个值

[英]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 我尝试过查看SQL中的Pivot,Case,Union和Group by函数,但是没有运气……但是看起来太简单了

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: 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 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

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: 我仍在努力,但我想说的第一件事是,在这种情况下,您无需继续使用UNION ALL(除非我错过了一些事情)...只使用一个SELECT查询(不并更改WHERE子句,如下所示:

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. 根据您在给定链接上发布的屏幕截图(使问题更容易发现),我可以看到您需要使用DISTINCT关键字。 Basically: SELECT DISTINCT etc... 基本上:SELECT DISTINCT等...

@Matt Simply using DISTINCT returns the same result as before. @Matt只需使用DISTINCT即可返回与以前相同的结果。 This is because I'm selecting "CustomFieldId" column 3 times from a different table than "IssueId" in my select. 这是因为我从另一个表中选择了3个“ CustomFieldId”列,而不是我选择的“ IssueId”列。 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. 我怎么需要显示所有数据而不仅仅是一个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 :) 我确实通过在3个不同的临时表中选择“ CustomFieldId”来解决此问题,然后通过最终选择将所有表组合在一起……这恰好返回了我想要的结果:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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