The following will perform an action similar to a FOREACHFOREACH cycle...:
createCREATE tableTABLE #TableOne (
UserId varcharVARCHAR(5),
SalesNo intINT,
DateSale dateDATE,
MarkMet bitBIT);
insert
INSERT intoINTO #TableOne (
UserId,
SalesNo,
DateSale,
MarkMet) valuesVALUES
('ec12', 22, '2017-01-01', 1),
('ec12', 4, '2017-01-02', 0),
('ec12', 3, '2017-01-03', 0),
('er11', 30, '2017-01-01', 1),
('er11', 22, '2017-01-02', 1),
('er11', 33, '2017-01-03', 1),
('ss33', 40, '2017-01-02', 1),
('ss33', 5, '2017-01-10', 0)
;
declareDECLARE @RowCount intINT = (selectSELECT distinctDISTINCT countCOUNT(*) UserId fromFROM #TableOne);
declareDECLARE @i intINT = 11;
declareDECLARE @UserId varcharVARCHAR(5);
declareDECLARE @Temp tableTABLE (id intINT, userid varcharVARCHAR(5));
insertINSERT intoINTO @Temp (id, userid)
selectSELECT
ROW_NUMBER() OVER(orderORDER byBY t.UserId) AS Id
,t.UserId
fromFROM (
select distinctSELECT DISTINCT
UserId
fromFROM #TableOne) t;
whileWHILE (@i <= @RowCount)
beginBEGIN
setSET @UserId = (selectSELECT t.userid fromFROM @Temp t whereWHERE t.id = @i)
--/************************************************/
Generate /* Build the logic to be iterated per each user */
/* (generate CSV, Send Mail, etc) */
--/* .. */
/* eg. selectSELECT * from */
/* FROM #TableOne where */
/* WHERE UserId = @UserId ...
*/
--/* Send Mail */
/************************************************/
setSET @i = @i + 1;
endEND
First it will create a temp table where to store each unique UserId and will assign them a pseudo-uid based on the ROW_COUNT
, then it will iterate through this newly created table to get the UserId's one by one, at which point you'll be able to execute an action per record/UserId.