سؤال

لقد تلقيت بيانات من مصدر خارجي ، وهو بتنسيق ملخص. أحتاج إلى طريقة لتخزين هذا لتناسب نظام أستخدمه.

لتوضيح ، افترض أن البيانات التي تلقيتها تبدو مثل هذا:

receivedTable:

Age     Gender     Count
40      M          3
41      M          2

أريد أن يكون هذا تنسيقًا غير متميز مثل هذا:

systemTable:

ID      Age        Gender
1       40         M          
2       40         M 
3       40         M 
4       41         M          
5       41         M 

شكرًا
كارل

هل كانت مفيدة؟

المحلول

اعتمادًا على نطاق عددك ، يمكنك استخدام جدول البحث الذي يحمل سجلات X بالضبط لكل عدد صحيح X. مثله:

create table counter(num int)
insert into counter select 1

insert into counter select 2
insert into counter select 2

insert into counter select 3
insert into counter select 3
insert into counter select 3

insert into counter select 4
insert into counter select 4
insert into counter select 4
insert into counter select 4

ثم انضم إلى هذا الجدول:

create table source(age int, gender char(1), num int)
insert into source select 40, 'm', 3
insert into source select 30, 'f', 2
insert into source select 20, 'm', 1

--insert into destination(age, gender)
    select age, gender
    from source
        inner join counter on counter.num = source.num

نصائح أخرى

من "Works on My Machine (TM)" مستقر استعلام متكرر ، مع كل التحذيرات المعتادة حول عمق العودية القصوى.

with Expanded(exAge, exGender, exRowIndex) as
(
    select
        Age as exAge, 
        Gender as exGender, 
        1 as exRowIndex
    from
        tblTest1
    union all
        select
            exAge,
            exGender,
            exRowIndex+1
        from
            tblTest1 t1 
            inner join
            Expanded e on (e.exAge = t1.Age and e.exGender = t1.Gender and e.exRowIndex < t1.Count)         
)
select
    exAge, 
    exGender, 
    exRowIndex
from
    Expanded
order by 
    exAge, 
    exGender, 
    exRowIndex
option (MAXRECURSION 0)  -- BE CAREFUL!!

لا تحصل على معرف الصف - ولكن إدخال نتيجة الاستعلام في جدول مع عمود هوية سيتعامل مع ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top