簡體   English   中英

根據另一列的字段值選擇具有相同列值的行

[英]Select rows that have the same column value based on another column's field values

在我的表中,我有3列,分別是SubmissionId, FieldName, FieldValue 我有一個查詢:

SELECT SubmissionId, FieldName, FieldValue 
FROM myTable 
WHERE (FieldValue = "Soccer") 
  OR (FieldValue = "Main Hall") 
  OR (FieldValue = "August 23, 2017")

返回以下內容:

SubmissionId | 欄位名稱| 欄位值

     1508        | ClassLocation |  Main Hall
     1509        | EventName     |  Soccer
     1512        | EventName     |  Soccer
     1516        | ClassLocation |  Main Hall
     1520        | EventName     |  Soccer
     1520        | EventDate     |  August 23, 2017
     1520        | ClassLocation |  Main Hall
     1523        | EventName     |  Soccer
     1524        | EventName     |  Soccer
     1525        | ClassLocation |  Main Hall
     1538        | EventName     |  Soccer
     1539        | EventName     |  Soccer
     1539        | EventDate     |  August 23, 2017
     1539        | ClassLocation |  Main Hall
     1540        | ClassLocation |  Main Hall
     1550        | ClassLocation |  Main Hall

我現在正在嘗試找出添加到此查詢的最佳方法,這樣我只能從重復自身3次的SubmissionId列中獲取字段值,在這種情況下,它將是1520和1539的提交ID。提前為您提供幫助,這讓我難過了一段時間。

嘗試:

SELECT SubmissionId, COUNT(SubmissionId) 
FROM YourTable 
GROUP BY SubmissionId 
HAVING COUNT(SubmissionId) = 3
SELECT SubmissionId
FROM myTable 
WHERE FieldValue in ('Soccer','Main Hall', 'August 23, 2017')
GROUP BY SubmissionID
HAVING count(Distinct fieldName) = 3 

我使用一種特殊的情況,即fieldValue可以為給定的SubmitID重復。

您還可以綁定FieldName,以確保配對映射

WHERE (FieldName, FieldValue) in (('EventName','Soccer'),('ClassLocation','Main Hall'),('EventDate','August 23, 2017'))

只需將當前查詢用作子查詢進行匯總

SELECT SubmissionId
FROM ( SELECT SubmissionId, FieldName, FieldValue 
       FROM myTable 
       WHERE FieldValue IN ( "Soccer", "Main Hall", "August 23, 2017")
     ) as T
GROUP BY SubmissionId
HAVING COUNT(*) = 3

暫無
暫無

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

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