0

丸一日このクエリを実行していて、頭が回らないようです。たぶん、正しい方向に私を向けるか、私が探していると思われる機能を教えていただければ、それは大きな意味があります. SQL の Pivot、Case、Union、および Group by 関数を調べてみましたが、うまくいきませんでした。

複数のテーブルから選択しています。テーブルの 1 つには、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

結果:

IssueIdワーク チケット 顧客名 ジョブの説明プリンタ タスクの説明 進捗状況 優先度 DateDue
1070 8828 8828 8828 ハイデルベルクのパンフレット 0 アートワーク ハイ 00:00.0
1070 パンフレット パンフレット パンフレット ハイデルベルク パンフレット 0 Art Work High 00:00.0
1070 リバティライフ リバティライフ リバティライフ ハイデルベルク パンフレット 0 アートワーク ハイ 00:00.0
1082 Liberty Life Liberty Life Liberty Life ハイデルベルク (パンフレット 0 Art Work High 00:00.0
1082 パンフレット パンフレット パンフレット ハイデルベルク (パンフレット 0 Art Work High 00:00.0
1082 8294 8294 8294 ハイデルベルグ (パンフレット 0 Art Work High 00:00.0
1086 8295 8295 8295 ハイデルベルク (パンフレット 0 Art Work High 00:00.0
1086 安定成長パンフレット 安定成長パンフレット 安定成長パンフレット ハイデルベルク (パンフレット 0 Art Work High 00:00.0
1086 Liberty Life Liberty Life Liberty Life ハイデルベルク (パンフレット 0 Art Work High 00:00.0
1090 リバティライフ リバティライフ リバティライフカモリ (VASカード 0 アートワークハイ 00:00.0
1090 VAS カード VAS カード VAS カード カモリ (VAS カード 0 Art Work High 00:00.0
1090 8296 8296 8296 カモリ (VAS カード 0 アートワーク ハイ 00:00.0
1104 8300 8300 8300 ハイデルベルグ メニューテキスト 0 アートワーク 高 00:00.0
1104 メニューテキスト メニューテキスト メニューテキスト ハイデルベルグ メニューテキスト 0 アートワーク 高 00:00.0
1104 南アフリカ航空 南アフリカ航空 南アフリカ航空 ハイデルベルグ メニューテキスト 0 Art Work High 00:00.0

太字の列が問題を引き起こしています。

select で次のものが返されるようにします。

IssueId ワーク チケット 顧客名 ジョブの説明 プリンタ タスクの説明 進捗状況 優先度 DateDue
1070 8828 Liberty Life のパンフレット ハイデルベルクのパンフレット 0 Art Work High 00:00.0
1082 8294 8294 パンフレット ハイデルベルク (パンフレット 0 Art Work High 00:00.0
1086 8295 リバティ ライフ リバティ ライフ ハイデルベルク (パンフレット 0 Art Work High 00:00.0
1090 8296 リバティライフ VAS カード カモリ (VAS カード 0 Art Work High 00:00.0
1104 8300 南アフリカ航空 メニュー テキスト ハイデルベルグ メニュー テキスト 0 Art Work High 00:00.0

どのような機能またはタイプの選択を使用できますか?

4

2 に答える 2

0

@Matt DISTINCT を使用するだけで、以前と同じ結果が返されます。これは、選択した「IssueId」とは異なるテーブルから「CustomFieldId」列を 3 回選択しているためです。しかし、選択でサブクエリを使用すると、必要な結果が得られます。

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

1つのIDだけでなく、すべてのデータを表示する必要があります。

「CustomFieldId」を3つの異なる一時テーブルに選択してこの問題を解決し、最後の選択ですべてのテーブルを結合します...これはまさに私が望むものを返しました:)

于 2013-04-04T11:15:24.290 に答える
0

私はまだそれに取り組んでいますが、ここで役立つと最初に言うことは、この場合(何かを見逃していない限り)UNION ALLを使い続ける必要がないということです... 1つのSELECTクエリを使用するだけです(いいえunions) を変更し、WHERE 句を次のように変更します。

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

最初にそれを試してみて、結果を確認してください...それから教えてください

編集

特定のリンクに投稿したスクリーンショットに基づいて (問題をより簡単に確認できるようになりました)、DISTINCTキーワードを使用する必要があることがわかります。基本的に:SELECT DISTINCTなど...

于 2013-03-15T11:04:19.453 に答える