人们需要见面一次——表传播

问题描述

我有一个 33 人的名单,他们需要与每个人见面一次,我有具体的见面日期。 我如何在表中复制这些日期?

我不必在 mssql 中做这个,它甚至可以是 excel

很高兴得到一些如何解决这个问题的反馈,手工操作似乎是浪费时间,说实话没那么简单

我现在有这样的东西:

insert into @Tdate ( data ) select '20210426'
insert into @Tdate ( data ) select '20210510'
insert into @Tdate ( data ) select '20210524'
insert into @Tdate ( data ) select '20210607'
insert into @Tdate ( data ) select '20210621'
insert into @Tdate ( data ) select '20210705'
insert into @Tdate ( data ) select '20210719'
insert into @Tdate ( data ) select '20210802'
insert into @Tdate ( data ) select '20210816'
insert into @Tdate ( data ) select '20210830'
insert into @Tdate ( data ) select '20210913'
insert into @Tdate ( data ) select '20210927'
insert into @Tdate ( data ) select '20211011'
insert into @Tdate ( data ) select '20211025'
insert into @Tdate ( data ) select '20211108'
insert into @Tdate ( data ) select '20211122'
insert into @Tdate ( data ) select '20211206'
insert into @Tdate ( data ) select '20211220'
insert into @Tdate ( data ) select '20220103'
insert into @Tdate ( data ) select '20220117'
insert into @Tdate ( data ) select '20220131'
insert into @Tdate ( data ) select '20220214'
insert into @Tdate ( data ) select '20220228'
insert into @Tdate ( data ) select '20220314'
insert into @Tdate ( data ) select '20220328'
insert into @Tdate ( data ) select '20220411'
insert into @Tdate ( data ) select '20220425'
insert into @Tdate ( data ) select '20220509'
insert into @Tdate ( data ) select '20220523'
insert into @Tdate ( data ) select '20220606'
insert into @Tdate ( data ) select '20220620'
insert into @Tdate ( data ) select '20220704'

select * from @tdate

declare @tperson table ( lp int identity(1,1),person varchar(120),[AA] date,[AB] date,[AC] date,[AD] date,[AE] date,[AF] date,[AG] date,[AH] date,[AI] date,[AJ] date,[AK] date,[AL] date,[AM] date,[AN] date,[AO] date,[AP] date,[AR] date,[AS] date,[AT] date,[AU] date,[AW] date,[AX] date,[AY] date,[AZ] date,[BA] date,[BB] date,[BC] date,[BD] date,[BF] date,[BE] date,[BG] date,[BH] date,[BI] date )

insert into @tperson ( person )
select 'AA'
insert into @tperson ( person )
select 'AB'
insert into @tperson ( person )
select 'AC'
insert into @tperson ( person )
select 'AD'
insert into @tperson ( person )
select 'AE'
insert into @tperson ( person )
select 'AF'
insert into @tperson ( person )
select 'AG'
insert into @tperson ( person )
select 'AH'
insert into @tperson ( person )
select 'AI'
insert into @tperson ( person )
select 'AJ'
insert into @tperson ( person )
select 'AK'
insert into @tperson ( person )
select 'AL'
insert into @tperson ( person )
select 'AM'
insert into @tperson ( person )
select 'AN'
insert into @tperson ( person )
select 'AO'
insert into @tperson ( person )
select 'AP'
insert into @tperson ( person )
select 'AR'
insert into @tperson ( person )
select 'AS'
insert into @tperson ( person )
select 'AT'
insert into @tperson ( person )
select 'AU'
insert into @tperson ( person )
select 'AW'
insert into @tperson ( person )
select 'AX'
insert into @tperson ( person )
select 'AY'
insert into @tperson ( person )
select 'AZ'
insert into @tperson ( person )
select 'BA'
insert into @tperson ( person )
select 'BB'
insert into @tperson ( person )
select 'BC'
insert into @tperson ( person )
select 'BD'
insert into @tperson ( person )
select 'BF'
insert into @tperson ( person )
select 'BE'
insert into @tperson ( person )
select 'BG'
insert into @tperson ( person )
select 'BH'
insert into @tperson ( person )
select 'BI'


update @tperson set [AA] = '21000101' 
update @tperson set [AB] = '21000101' where lp >= 2
update @tperson set [AC] = '21000101' where lp >= 3
update @tperson set [AD] = '21000101' where lp >= 4
update @tperson set [AE] = '21000101' where lp >= 5
update @tperson set [AF] = '21000101' where lp >= 6
update @tperson set [AG] = '21000101' where lp >= 7
update @tperson set [AH] = '21000101' where lp >= 8
update @tperson set [AI] = '21000101' where lp >= 9
update @tperson set [AJ] = '21000101' where lp >= 10
update @tperson set [AK] = '21000101' where lp >= 11
update @tperson set [AL] = '21000101' where lp >= 12
update @tperson set [AM] = '21000101' where lp >= 13
update @tperson set [AN] = '21000101' where lp >= 14
update @tperson set [AO] = '21000101' where lp >= 15
update @tperson set [AP] = '21000101' where lp >= 16
update @tperson set [AR] = '21000101' where lp >= 17
update @tperson set [AS] = '21000101' where lp >= 18
update @tperson set [AT] = '21000101' where lp >= 19
update @tperson set [AU] = '21000101' where lp >= 20
update @tperson set [AW] = '21000101' where lp >= 21
update @tperson set [AX] = '21000101' where lp >= 22
update @tperson set [AY] = '21000101' where lp >= 23
update @tperson set [AZ] = '21000101' where lp >= 24
update @tperson set [BA] = '21000101' where lp >= 25
update @tperson set [BB] = '21000101' where lp >= 26
update @tperson set [BC] = '21000101' where lp >= 27
update @tperson set [BD] = '21000101' where lp >= 28
update @tperson set [BF] = '21000101' where lp >= 29
update @tperson set [BE] = '21000101' where lp >= 30
update @tperson set [BG] = '21000101' where lp >= 31
update @tperson set [BH] = '21000101' where lp >= 32
update @tperson set [BI] = '21000101' where lp >= 33


-- juz odbyte
update @tperson set [AB] = '20210426' where lp = 1
update @tperson set [AE] = '20210426' where lp = 4
update @tperson set [AJ] = '20210426' where lp = 8
update @tperson set [AK] = '20210426' where lp = 3
update @tperson set [AS] = '20210426' where lp = 16
update @tperson set [AT] = '20210426' where lp = 12
update @tperson set [AU] = '20210426' where lp = 17
update @tperson set [AY] = '20210426' where lp = 7
update @tperson set [AZ] = '20210426' where lp = 14
update @tperson set [BA] = '20210426' where lp = 21
update @tperson set [BB] = '20210426' where lp = 13
update @tperson set [BC] = '20210426' where lp = 6
update @tperson set [BD] = '20210426' where lp = 15
update @tperson set [BE] = '20210426' where lp = 29
update @tperson set [BG] = '20210426' where lp = 22
update @tperson set [BI] = '20210426' where lp = 32

update @tperson set [AC] = '20210510' where lp = 1
update @tperson set [AF] = '20210510' where lp = 4
update @tperson set [AZ] = '20210510' where lp = 7

SELECT * FROM @TPERSON ````

解决方法

Excel VBA 将是一个不错的选择。为每个人创建一个字符串列表,然后在此列表上创建一个 for each 循环,并在每个 for each 循环中创建一个 for each 循环,以使每个人与每个人见面。排除已经安排好的会议。

Dim Persons as list of string
Persons.add("Employee1")
Persons.add("Employee2")

Dim Person as string
Dim PersonToMeet as string

Dim Meetings as list of string
Dim MeetingsWithDates as list of string
Dim Meeting as string
Dim LastDateUsed as Datetime = "01-01-2022"

For each Person in Persons
    For each PersonToMeet in Persons
        If (Person != PersonToMeet) then
            Meeting = Person + " meets " + PersonToMeet
            if not (Meetings.contains(meeting)) then
                Meetings.add(meeting)
                Set LastDateUsed = DateAdd(LastDateUsed,D,1)
                MeetingsWithDates.add(meeting + " at " + LastDateUsed.ToString())
            end if
        end if
    Next
Next

最后,将 MeetingsWithDates 中的字符串打印到定义的范围内。

您需要进行一些代码调试,这只是一个粗略的例子,开箱即用。