将多条记录插入/合并到一个记录中,并使用可变表在明信片的两面打印

问题描述 投票:0回答:1

我的任务是在明信片的两面打印一组地址。所有者地址将在正面居中打印,而包裹号,地址和其他数据将在背面居中打印。

[每张纸四张明信片。我知道如何对明信片进行双面打印,现在的挑战是我必须双面打印。因此,我认为首先,我需要对齐数据,以便背面打印的内容与正面打印的内容相对应。

我认为,为了能够使用SSRS进行双面打印,我需要更改记录的检索方式。

每个记录有6列。我需要每页打印4个地址(打印时两面)

我当前的数据:

ParcelNumber    OwnerName       OwnerAddress                Owner_City_State_Zip        ParcelAddress           parcel_city_state_zip
70918302278     Smith, John     15 Dimondi Ct               Dover, DE, 19901            15 White Oak St         Laurel, DE, 19956
70918403133     Perez, Victor   8619 S Wolcott Ave          Chicago, IL, 60620          6634 W 64th Pl          Chicago, IL, 60638
70918404058     Flying, Lotus   5527 E Hazel Mountain Rd    Cleveland, VA, 24225        1925 Freedom Ln         Falls Church, VA, 22043
70919107370     Pastorius, Jaco 1549 Highland Dr            Lake Geneva, WI, 53147      415 S Wells St          Lake Geneva, WI, 53147
70823107036     Bocelli, Andrea 1310 Fillmore St            San Francisco, CA, 94115    1099 Fillmore St #4R    San Francisco, CA, 94115
70918221072     Ttracks, Shaun  516 Manford Rd SW           Atlanta, GA, 30310          480 Riverside Dr NW     Atlanta, GA, 30328
70919110092     Little, John    242 W Hudson St             Long Beach, NY, 11561       38 Vincent St           Rockville Centre, NY, 11570

我当时想完成此工作的一种方法是将4条记录插入到一​​行中,这样输出看起来像这样(很抱歉,它的长度):

ID  Parcel1_1   Owner_1         OwnerAddress_1      OwnerCityStateZip_1         ParcelAddress_1         ParcelCityStateZip_1        Parcel1_2   Owner_2         OwnerAddress_2      OwnerCityStateZip_2 ParcelAddress_2     ParcelCityStateZip_2    Parcel1_3   Owner_3         OwnerAddress_3              OwnerCityStateZip_3     ParcelAddress_3 ParcelCityStateZip_3        Parcel1_4   Owner_4             OwnerAddress_4      OwnerCityStateZip_4     ParcelAddress_4 ParcelCityStateZip_4
1   70918302278 Smith, John     15 Dimondi Ct       Dover, DE, 19901            15 White Oak St         Laurel, DE, 19956           70918403133 Perez, Victor   8619 S Wolcott Ave  Chicago, IL, 60620  6634 W 64th Pl      Chicago, IL, 60638      70918404058 Flying, Lotus   5527 E Hazel Mountain Rd    Cleveland, VA, 24225    1925 Freedom Ln Falls Church, VA, 22043     70919107370 Pastorius, Jaco     1549 Highland Dr    Lake Geneva, WI, 53147  415 S Wells St  Lake Geneva, WI, 53147
2   70823107036 Bocelli, Andrea 1310 Fillmore St    San Francisco, CA, 94115    1099 Fillmore St #4R    San Francisco, CA, 94115    70918221072 Tracks, Shaun   516 Manford Rd SW   Atlanta, GA, 30310  480 Riverside Dr NW Atlanta, GA, 30328      70919110092 Little, John    242 W Hudson St             Long Beach, NY, 11561   38 Vincent St   Rockville Centre, NY, 11570 70918214126 Zidane, Zinedine    724 Hill Ave        Pittsburgh, PA, 15221   711 Copeland St Pittsburgh, PA, 15232
and so on...

表格看起来像这样:

DECLARE @FOUR_INTO_ONE AS TABLE
(   ID_NUM INT IDENTITY(1,1)
,   PARCEL_1 VARCHAR(20)    
,   OWNERNAME_1 VARCHAR(200)
,   OWNERADDRESS_1 VARCHAR(300)
,   OWNERCITYSTATEZIP_1 VARCHAR(300)
,   PARCELADDRESS_1 VARCHAR(300)
,   PARCELCITYSTATEZIP_1 VARCHAR(300)
,   PARCEL_2 VARCHAR(20)    
,   OWNERNAME_2 VARCHAR(200)
,   OWNERADDRESS_2 VARCHAR(300)
,   OWNERCITYSTATEZIP_2 VARCHAR(300)
,   PARCELADDRESS_2 VARCHAR(300)
,   PARCELCITYSTATEZIP_2 VARCHAR(300)
,   PARCEL_3 VARCHAR(20)    
,   OWNERNAME_3 VARCHAR(200)
,   OWNERADDRESS_3 VARCHAR(300)
,   OWNERCITYSTATEZIP_3 VARCHAR(300)
,   PARCELADDRESS_3 VARCHAR(300)
,   PARCELCITYSTATEZIP_3 VARCHAR(300)
,   PARCEL_4 VARCHAR(20)    
,   OWNERNAME_4 VARCHAR(200)
,   OWNERADDRESS_4 VARCHAR(300)
,   OWNERCITYSTATEZIP_4 VARCHAR(300)
,   PARCELADDRESS_4 VARCHAR(300)
,   PARCELCITYSTATEZIP_4 VARCHAR(300))

我认为这可能可行,因为我可以更好地控制每个记录页1和页2的值的放置方式和位置。

我不确定如何使用SQL完成此操作,这是使用CURSOR的地方吗?需要多少个循环,是否有一种简单的方法来处理数据,使输出看起来像我需要的那样?

编辑:我试图仿效在此question中使用STUFF的示例>

SELECT
    Parcel = 
        STUFF((
            SELECT [ParcelNumber]
            FROM [dbo].[BI_RPEC] 
            WHERE [ParcelNumber] = t.[ParcelNumber]            
            FOR XML PATH(''), TYPE
        ).value('text()[1]','NVARCHAR(MAX)'), 1, 1, N'')
 FROM [dbo].[BI_RPEC] t
WHERE 
    t.ParcelNumber IN ('070823107036','070919107370','070919110092','070918404058','070918403133','070918302278','070918221072', '070918214126')

但是只检索NULL。

我的任务是在明信片的两面打印一组地址。所有者地址将在正面居中打印,而包裹号,地址和其他数据将在背面居中打印。四个...

sql-server
1个回答
0
投票

只是快速记事本上的涂鸦。尚未通过示例数据进行测试。现在要困了。

© www.soinside.com 2019 - 2024. All rights reserved.