как использовать объединение в цикле, я пытался объединить результаты, спасибо - PullRequest
0 голосов
/ 19 октября 2018

как использовать объединение в цикле Я пытался объединить результаты, спасибо

DECLARE @STACODE INT;

SET @STACODE = 001

WHILE @STACODE <= 095

BEGIN   

    SELECT 

    DIVCODE,
    STACODE,
    EMPNO,
    LNAME +', '+ FNAME + ' '+MI EMPNAME,
    POLICYNO,
    EFFMM +'/'+EFFYY EFDATE,
    TERMM +'/'+TERYY TERDATE,
    DEDAMT
    FROM TBL_LISTING_NCR
    WHERE DIVCODE='089'
    AND STACODE= @STACODE

    UNION ALL

    SELECT 
    'STATION TOTAL'DIVCODE,
    ' 'STACODE,
    ' ' EMPNO,
    ' ' EMPNAME,
    ' 'POLICYNO,
    ' ' EFDATE,
    ' ' TERDATE,
    SUM(DEDAMT)
    FROM TBL_LISTING_NCR
    WHERE DIVCODE='089'
    AND STACODE= @STACODE

    --UNION ALL


SET @STACODE = @STACODE + 1

END

1 Ответ

0 голосов
/ 19 октября 2018

В SQL мы не используем циклы, как в языке программирования, где мы должны сообщать машине, как это делать.В SQL мы сообщаем машине , какие данные выбрать.В вашем случае вы хотите строки для кодов от 1 до 95 плюс одна строка для суммы dedamt.

Вот решение с UNION ALL:

SELECT 
  divcode,
  stacode,
  empno,
  lname + ', '+ fname + ' ' + mi AS empname,
  policyno,
  effmm + '/' + effyy AS efdate,
  termm + '/' + teryy AS terdate,
  dedamt
FROM tbl_listing_ncr
WHERE divcode = '089'
AND stacode BETWEEN 1 AND 95

UNION ALL

SELECT 
  'STATION TOTAL' AS divcode,
  ' ' AS stacode,
  ' ' AS empno,
  ' ' AS empname,
  ' ' AS policyno,
  ' ' AS efdate,
  ' ' AS terdate,
  SUM(dedamt) AS dedamt
FROM tbl_listing_ncr
WHERE divcode = '089'
AND stacode BETWEEN 1 AND 95

ORDER BY
  stacode,
  CASE WHEN divcode = 'STATION TOTAL' THEN 2 ELSE 1 END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...