2016-10-21 2 views
0

, что я пытаюсь добиться, чтобы выбрать различные значения столбца, которое может быть сделаноВыполнение операции CRUD на каждом отдельном значение столбца

select distinct B_id as beauName from tbl_addbill WHERE forUser='sun4269' 

, а затем для каждого отдельного B_id я хочу, чтобы выполнить это запрос

IF EXISTS (SELECT * FROM tbl_addbill WHERE forUser='sun4269' and bill_no='2015-2016' and B_id='Bhavik Creation-1') 
BEGIN 
    select 1; 
END 
ELSE 
BEGIN 
    insert into tbl_addbill(bill_no,B_id,amount,tax,amount_paid,forUser,bill_date) 
     values 
     (
      '2015-2016', 
      'Bhavik Creation-1', 
      (
       select COALESCE(sum(amount),0) 
        from tbl_addbill 
        where forUser='sun4269' and B_id='BhavikCreation-1' 
         and bill_date between '2015-04-01' and '2016-03-31' 
      ), 
      (
       select COALESCE(sum(tax),0) 
        from tbl_addbill 
        where forUser='sun4269' and B_id='BhavikCreation-1' 
         and bill_date between '2015-04-01' and '2016-03-31' 
      ), 
      (
       select COALESCE(sum(amount_paid),0) 
        from tbl_addbill 
        where forUser='sun4269' and B_id='BhavikCreation-1' 
         and bill_date between '2015-04-01' and '2016-03-31' 
      ), 
      'sun4269', 
      getdate() 
     ); 
    select 2; 
END; 

в настоящее время оба моих запросы работает хорошо, но то, что я хочу, это сочетание обоих из них, как первые, чтобы выбрать отличную B_id от tbl_addbill и выполнить этот второй запрос стольких раз, сколько отчетливый список continue.currently мой второй запрос работает для 'BhavikCreation-1' o и я хочу заменить его отдельным списком, а мой второй запрос - рассчитать СУММ сумму, налог, amount_paid за период с 2015-04-01 по 2016-03-31 и вставить новую строку в таблицу

а во-вторых, я использую тот же пункт, где несколько раз, есть ли способ уменьшить его

ответ

0

Попробуйте этот запрос с GROUP BY пункта:

insert into tbl_addbill(bill_no,B_id,amount,tax,amount_paid,forUser,bill_date) 
    select '2015-2016', 
      B_id, 
      COALESCE(sum(IIF(bill_date between '2015-04-01' and '2016-03-31', amount,  0)), 0), 
      COALESCE(sum(IIF(bill_date between '2015-04-01' and '2016-03-31', tax,   0)), 0), 
      COALESCE(sum(IIF(bill_date between '2015-04-01' and '2016-03-31', amount_paid, 0)), 0), 
      forUser, 
      getdate() 
     from tbl_addbill 
     where forUser = 'sun4269' 
     group by B_id; 

IF @@ROWCOUNT = 0 
    select 1; 
ELSE 
    select 2; 
+0

благодаря @ruslan к для ответа, но не дает правильных результатов, поскольку он не вставляет запись для B_id, где счет не находится в диапазоне указанного диапазона дат, я хочу сохранить ('2015-2016', ' ', 0,0,0,' sun4269 ',' '), несмотря на диапазон дат, поскольку он фильтрует результаты на основе диапазона дат .... в любом случае спасибо за ответ снова – sam5808

+0

вкратце я хочу суммируйте другой , если в данном диапазоне дат нет, как 0,0,0 – sam5808

+0

@ sam5808 Я отредактировал ответ, как вы хотите, попробуйте –