2015-01-14 2 views
0

Привет всем. У меня есть этот SQL-запрос, и я улучшаюсь с моими запросами, но я все еще не очень разбираюсь в анализе данных, чтобы он выглядел так, как вы хотите.Строка Сортировка в SQL

SELECT r.queueName, COUNT(*) as qty FROM LeaseComplete.dbo.QueueEntries q 
    INNER JOIN LeaseComplete.dbo.Queues r 
     ON r.queueID = q.queueentryQueueID 
    LEFT JOIN LeaseComplete.dbo.QueueActions a 
     ON a.queueactQueueEntryID = q.queueentryID 
     AND a.queueactCreationDate >(CONVERT(datetime, GETDATE()) -1) 
    WHERE q.queueentryAddDate > (CONVERT(datetime, GETDATE()) -1) 
    AND q.queueentryTaskTypeCode = 'Collection' 
    AND q.queueentryStatus != 'Closed' 
    AND r.queueTypeCode = 'Collection' 
    AND r.queueTypeCode = 'Mileage' 
    AND r.queueTypeCode = 'Insurance' 
    AND r.queueName NOT LIKE '%referral%' 
    OR r.queueName LIKE '%Awhite%' 
    OR r.queueName LIKE '%Dsmith%' 
    OR r.queueName LIKE '%Kmartin%' 
    OR r.queueName LIKE '%Mgonzalez%' 
    OR r.queueName LIKE '%Ckponton%' 
    OR r.queueName LIKE '%WTamayo%' 
    OR r.queueName LIKE '%mbare%' 
    OR r.queueName LIKE '%dlittle%' 

    GROUP BY r.queueName 

Так что у меня есть выше запрос и он должен тянуть любые данные с первым начальным, фамилией queueName седловины, и если он содержит пробег, страхование, сбор, как хорошо. Поэтому я получаю данные ниже.

+--------------------------------+-----+ 
|   queueName   | qty | 
+--------------------------------+-----+ 
| Collection AWhite Delinquent | 494 | 
| Collection AWhite Followup  | 10 | 
| Collection AWhite Legal  | 9 | 
| Collection CKponton Delinquent | 790 | 
| Collection CKponton Followup | 38 | 
| Collection CKponton Mileage | 2 | 
| Collection DLittle Delinquent | 114 | 
| Collection DLittle Legal  | 28 | 
| Collection DSmith Delinquent | 486 | 
| Collection DSmith Followup  | 21 | 
| Collection DSmith Legal  | 56 | 
| Collection KMartin Delinquent | 97 | 
| Collection KMartin Followup | 3 | 
| Collection MBare Delinquent | 773 | 
| Collection MBare Followup  | 22 | 
| Collection MBare Legal   | 1 | 
| Collection MBare Mileage  | 44 | 
| Collection MGonzalez Delinquen | 739 | 
| Collection MGonzalez Followup | 31 | 
| Collection Referral DSmith  | 107 | 
| Collection WTamayo Delinquent | 682 | 
| Collection WTamayo Followup | 21 | 
| Collection WTamayo Mileage  | 1 | 
| Insurance Collection AWhite | 44 | 
| Insurance Collection CKponton | 59 | 
| Insurance Collection DLittle | 17 | 
| Insurance Collection DSmith | 46 | 
| Insurance Collection KMartin | 2 | 
| Insurance Collection MBare  | 40 | 
| Insurance Collection MGonzalez | 35 | 
| Insurance Collection WTamayo | 50 | 
| Insurance Monitor AWhite  | 2 | 
| Insurance Monitor CKponton  | 2 | 
| Insurance Monitor MBare  | 1 | 
| Insurance Monitor MGonzalez | 3 | 
| Insurance Monitor WTamayo  | 2 | 
+--------------------------------+-----+ 

Как вы можете видеть, что это все еще тянет «реферал» в столбцах, по крайней мере один раз, что это не то, что я хотел. Я также пытаюсь понять, как это сделать, чтобы он не показывал колонку Insurance Monitor. Как получить эти имена строк, чтобы они соответствовали друг другу надлежащим образом. Извините, если моя грамматика ужасна, я все еще просыпаюсь в течение дня.

+1

Несвязанной на пути вы получаете результаты, ваш 'WHERE' условия перепутались:' И r.queueTypeCode = «Коллекция» И И r.queueTypeCode = 'Mileage'' ?, это невозможно (вы можете подумать об использовании 'IN'). Кроме того, вы позже добавляете условия «OR» без круглых скобок (вот почему вы действительно получаете результаты, но они почти наверняка не являются желаемыми результатами). – Lamak

ответ

3

Ваш запрос тост: Вы смешивания AND и OR условия без каких-либо () для обеспечения соблюдения синтаксического анализа/выполнения ordder, и у вас есть невозможные условия:

AND r.queueTypeCode = 'Collection' 
AND r.queueTypeCode = 'Mileage' 

Это не представляется возможным для одного поле/значение, чтобы иметь МНОЖЕСТВЕННЫЕ разные значения одновременно. Вы в основном говорите: «Это поле должно быть бананом и подводной лодкой одновременно».

Также: http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html Отметьте, что AND имеет более высокий приоритет, чем OR.

+0

Это на самом деле очень хорошее объяснение. Я получаю приоритет оператора, по крайней мере, я должен буду сказать, так как я могу это исправить, чтобы я мог сделать его «бананом, а затем подводной лодкой» –

+1

, если вы хотите, чтобы коллекция/пробег/страховые записи, тогда это должно быть «OR», которое можно упростить до «r.queueTypeCode IN» («Коллекция», «Пробег», «Страхование»). –

0

Я предполагаю, что вы хотите somethig как

SELECT r.queueName, COUNT(*) as qty FROM LeaseComplete.dbo.QueueEntries q 
    INNER JOIN LeaseComplete.dbo.Queues r 
     ON r.queueID = q.queueentryQueueID 
    LEFT JOIN LeaseComplete.dbo.QueueActions a 
     ON a.queueactQueueEntryID = q.queueentryID 
     AND a.queueactCreationDate >(CONVERT(datetime, GETDATE()) -1) 
    WHERE (q.queueentryAddDate > (CONVERT(datetime, GETDATE()) -1) 
    AND q.queueentryTaskTypeCode = 'Collection' 
    AND q.queueentryStatus != 'Closed' 
    AND r.queueTypeCode IN ('Collection', 'Mileage', 'Insurance') 
    AND r.queueName NOT LIKE '%referral%') 
    AND(r.queueName LIKE '%Awhite%' 
    OR r.queueName LIKE '%Dsmith%' 
    OR r.queueName LIKE '%Kmartin%' 
    OR r.queueName LIKE '%Mgonzalez%' 
    OR r.queueName LIKE '%Ckponton%' 
    OR r.queueName LIKE '%WTamayo%' 
    OR r.queueName LIKE '%mbare%' 
    OR r.queueName LIKE '%dlittle%') 

    GROUP BY r.queueName 
    ORDER BY r.queueName 
+0

Это не тянет «очередь страховой коллекции». Я сейчас экспериментирую, чтобы понять это. –

+0

u может изменить 'OR r.queueName LIKE '% dlittle%')' to 'OR r.queueName LIKE '% dlittle% ' ИЛИ r.queueName LIKE'% Collection% ') ' –

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