Я работаю над хранимой процедурой, которая будет запускаться один раз в неделю, поэтому я не беспокоюсь о скорости, а заставляю ее работать.
То, что я пытаюсь сделать, - это перебрать таблицу под названием households
, в которой хранится информация о домах, а затем использовать houseid
, перебирая таблицу под названием individuals
, которая вернет более одного человека, поэтому приводит меня к переберите этот результат для сбора информации.
Моя главная цель - объединить все имена людей в домашнем хозяйстве и их коды
declare @RowNum int,
@houseId nchar(10),
@hid nchar(25)
select @houseId=MAX(ID) FROM households --start with the highest ID
Select @RowNum = Count(*) From households --get total number of records
WHILE @RowNum > 0 --loop until no more records BEGIN
select @hid = id from households where ID = @houseid --get other info from that row
DECLARE @RowCount INT
SET @RowCount = (SELECT COUNT(ID) FROM (select id, firstname,lastname,party_code from indviduals where householdid = @houseid) as table1)
DECLARE @code1 VARCHAR(50), @names1 VARCHAR(500), @lastname1 VARCHAR(50)
-- Declare an iterator
DECLARE @I INT
-- Initialize the iterator
SET @I = (select min(id) from indviduals where householdid = @houseid)
-- Loop through the rows of a table @myTable
WHILE (@I <= @RowCount)
BEGIN
-- Declare variables to hold the data which we get after looping each record
DECLARE @code VARCHAR(50), @names VARCHAR(500), @lastname VARCHAR(50)
-- Get the data from table and set to variables
SELECT @code = party_code, @names = firstname, @lastname = lastname FROM (select id, firstname,lastname,party_code from indviduals where householdid = @houseid) as table1 WHERE ID = @I
-- Display the looped data
set @code1 = (@code + ',' + @code1)
set @names1 = (@names + ',' + @names1)
set @lastname1 = @lastname
-- Increment the iterator
SET @I = @I + 1
END
update households
SET firstnames=@names1, lastname=@lastname1, party_codes=@code1,
where id = @houseid
select top 1 @houseId=ID
from households
where ID < @houseID
order by ID desc --get the next one
set @RowNum = @RowNum - 1
END
household table
1 bekshire st dell MA 10001 02639 50 0002 dell NULL ALRGEN 1 BERKSHIRE ST NULL NULL NULL NULL
individuals that belong to household id 10001
first last code
BOB BUILDER U
JESS BUILDER A
i want
1 bekshire st dell MA 10001 02639 50 0002 dell NULL ALRGEN 1 BERKSHIRE ST BOB,JESS BUILDER U,A