2016-11-22 3 views
3

У меня есть таблица, подобная этой, внизу, где записи в основном представляют собой пару из двух (одинаковые ID1 и ID2), но разные Note и Status (несколько раз). Мне нужно выбрать все записи, которые в то же время имеют поле Примечание, равное «Готовность к КК», и поле Состояние равно 1, а записи с полем Примечание, равное «Готовность к каталогизации», имеют статус 0.sql query records пара из двух

ID1, ID2,  Note,      Status 
3,  22,  Ready for QC,    1 
3,  22,  Ready for Cataloging,  0 
36, 22,  Ready for QC,    1 
36, 22,  Ready for Cataloging,  1 
63, 22,  Ready for QC,    1 
63, 22,  Ready for Cataloging,  0 
67, 67,  Ready for QC,    0 
67, 67,  Ready for Cataloging,  0 

Любые предложения? Спасибо. Джованни

+1

Добро пожаловать в SO! При публикации вопросов обязательно отправляйте код, который вы пробовали. Это помогает нам понять ваш подход и, возможно, мы можем исправить что-то простое. В противном случае укажите вопрос, данные примера и ожидаемый результат, поскольку это помогает установить контекст вопроса. – xQbert

+0

также сообщение ожидаемый результат как текст – TheGameiswar

ответ

0

Это один больше, но приходится дублей:

SELECT t1.id1, t1.id2, t1.note, t1.status 
FROM 
(SELECT * 
FROM t 
WHERE note = 'Ready for QC' 
AND status = 1) t1 
INNER JOIN 
(SELECT * 
FROM t 
WHERE note = 'Ready for Cataloging' 
AND status = 0) t2 
ON t1.id1 = t2.id1 
AND t1.id2 = t2.id2 
+0

Он работает. Спасибо. Поскольку мой стол построен на лету двумя внутренними соединениями. Я повторяю этот длинный отбор дважды, но он довольно уродлив. Какие-либо предложения? выберите hev.HistEventID как ID, hev.EventName как EName, hev.DateLabel как DLabel из HistEvents как hev внутреннее соединение UserFieldXrefs как ufx на hev.HistEventID = ufx.ID и ContextID = 37 внутреннее соединение UserFields как uf on uf.UserFieldID = ufx.UserFieldID где (uf.UserFieldName = «Готов к QC» и подстроке (ufx.fieldvalue, 1,1) = '1') –

4

Я думаю, что вы хотите все ID1 и ID2 таких записей, где существуют оба условия ..

Это предположить, уникальность для каждого ID1, ID2, Примечание, Статус (что означает, что в таблице не может быть двух одинаковых записей)

SELECT ID1, ID2, count(*) cnt 
FROM Table 
WHERE (Note = "Ready to QC" and status = 1) 
    OR(note = "Ready for Cataloging" and Status 0) 
GROUP BY ID1, ID2 
HAVING COUNT(*) = 2 
+0

Я полагаю, что у вас может быть случай, когда у вас есть две записи, соответствующие первому условию и ни один из них не встретит второй, а затем запрос вернет эти записи (неправильно). – kbball

+0

: P почему я добавил уникальный комментарий к записи: P – xQbert

Смежные вопросы