2016-06-17 4 views
-1

Я работаю над созданием запроса, но с трудным временем придумываю правильные решения. Вот как мои данные выглядят ...SQL Server выбрать требуемую помощь в запросе

У меня около 10 000 записей - счетов в моем tblBilling.

  • Каждая запись имеет уникальный идентификационный номер в диапазоне от приблизительно 10 - 13000.
  • Однако мой первичный ключ является BillNo что в моих записях есть 1.

  • В случае, когда счет был возвращен , еще одна строка добавляется в ТПС, но в этом случае BillNo равно 2.

  • Кроме того, я еще один столбец называется AdjType, который может быть либо а, в, с
    • , когда BillNo - 2, AdjType = B
    • , но для обычного БиллаNo 1 - значение NULL.

Так это выглядит ...

tblBilling

ID BillNo Units TotalPaid AdjType 
------------------------------------- 
10 2  17  230  NULL 

Так это нормальный Билл, где BillNO 1 - это означает, что он был оплаченный счет ,

Кроме того, вы могли бы иметь BIllNO2, который, скорее всего, возврат, который будет выглядеть следующим образом ....

ID BillNo Units TotalPaid AdjType 
-------------------------------------- 
10 2  -17 -230  B 

Таким образом, здесь мы отрицая единицы, потому что его возврата и в этом случае ADJType = B

Оба вместе, если я SELECT * FROM tblBilling где ID = 10 я получаю это ....

ID BillNo Units TotalPaid AdjType 
----------------------------------------- 
10  1  17  230  NULL 
10  2  -17  -230  B 

Теперь моя главная цель состоит в том, чтобы выбрать все записи из tblBilling, ч но я не хочу выбирать какие-либо записи, у которых есть BillNo 2, связанный с ними. В принципе, если запись имеет BillNO = 1 - это рекорд, который мне нужен. Нет записей, которые имеют BillNo = 2. Пожалуйста помоги!

+0

BillNo является ПК или поле флага? –

+0

Возможно, вы можете использовать NOT EXISTS для этого довольно легко. https://msdn.microsoft.com/en-us/library/ms188336.aspx –

+0

@JuanCarlosOropeza PK – LD16

ответ

2
select * 
from tblBilling t1 
where t1.AdjType is NULL 
    and not exists(select 1 from tblBilling t2 
    where t2.id = t1.id and t2.AdjType = 'B') 
+0

Отлично! – LD16

1
SELECT * 
FROM 
    tblBilling 
WHERE 
    ID NOT IN (SELECT ID FROM tblBilling WHERE BillNo = 2) 
+0

Это даст мне все записи - однако многие из этих записей были возвращены, поэтому я wnt, чтобы убедиться, что записи, где BillNo = 1, не имеют BillNo = 2, связанных с ними. Мне нужно отредактировать счета, но если они уже были возвращены (BillNo = 2), то я не могу их настроить. – LD16

+1

Я обновил код, чтобы вы не получили никаких скорректированных значений. –

+0

Большое спасибо !!!! – LD16

1
select * from tblBilling a 
where not exists (select * from tblbilling b where a.id=b.id and a.billno<>b.billno) 
+0

Отлично, это тоже работает! – LD16

1
SELECT * 
FROM tblBilling A 
WHERE A.BillNo = 1 
AND NOT EXISTS 
    (
     SELECT * 
     FROM tblBilling B 
     WHERE A.id=B.id 
      AND B.BillNo =2 
      AND A.Units= (-1 * B.Units) 
      AND A.TotalPaid= (-1 * B.TotalPaid) 
    )