ตอนแถลงการณ์ในภาษา sql องเคอร์เซอร์ให้โพรโทคอล aimcomment ค่า

0

คำถาม

ฉันมีโต๊ะกับความช่วยเหลือจากค่าอย่าง:ยืนยันตัวตนของตัวเองหมายเลขโทรศัพท์,คนชื่อเป็นต้น อยู่ในโต๊ะนี้ด้วยกันถ้าเป็นคนมีมากกว่าหนึ่งหมายเลขโทรศัพท์ใครคนนั้นจะปรากฎหลายครั้งกันและทำซ้ำกับอีกหมายเลขโทรศัพท์ที่ตรงกับคนคนนั้น

เป้าหมายของฉันคือต้องเขียนเคอร์เซอร์ที่จะเพิ่มความแตกต่างโทรศัพท์เป็นคนที่มีด้วยการโดดครั้งเดียวค่าโทรศัพท์ใหม่โต๊ะกันของพวกเขาแยกกันโดย','. ในทางนั้นแต่ละคนเดียวที่จะปรากฏครั้งหนึ่งในโต๊ะแต่หมายเลขโทรศัพท์ค่าจะต้องได้อันที่หมายเลขโทรศัพท์นั่นคนที่เป็นเจ้าของแยกโดย','.

ฉันต้องมากับเรื่องแบบนี้:

อยู่นี่ฉันสร้าง"normalized"โต๊ะนั่นคนหาข้อมูลควรจะแทรก:

CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))

นี่เป็นชั่วคราวออกโต๊ะเพื่อเลือกคนหาหมายเลขนั่นเป็นอีกหลายครั้ง,หมายความว่ามันมีหลายหมายเลขโทรศัพท์(Telefonos_General เป็นโต๊ะฉันได้ข้อมูลจาก).

SELECT  Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING  COUNT(1) >1

ที่นี่ฉันประกาศที่ตัวแปรที่ใช้ในเคอร์เซอร์:

DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)

แล้วประกาศเคอร์เซอร์เอง:

DECLARE cursor_telefonos CURSOR FOR 
SELECT TOP (100) Cedula, cantidad_repetidos, Telefono_v1
FROM #DatosRepetidosTemp     
JOIN Telefonos_General on Cedula_v1 = Cedula
WHERE  Cedula is not null

เริ่มที่เคอร์เซอร์:

OPEN cursor_telefonos  
FETCH NEXT FROM cursor_telefonos 
INTO @Cedula, @Cuenta, @Prev_Telefono
WHILE @@FETCH_STATUS = 0   
BEGIN  
    IF @Telefonos = NULL
        SET @Telefonos = @Prev_Telefono
    ELSE

นี่คือในขณะที่วงนั้นคือคืน@Prev_Telefono เป็นโพรโทคอล aimcomment ตอนที่มันควรจะเป็นคน(@Telefonos+','+@Prev_Telefono).

    WHILE @Cuenta != 0
    BEGIN
        SET @Telefonos = @Telefonos+ ', ' + @Prev_Telefono
        SET @Prev_Telefono = @Telefonos
        SET @Cuenta = @Cuenta - 1

    END
    INSERT IGNORE INTO Telefono_General_V2 (Cedula_v2, Cantidad, Telefono_v2)
    VALUES (@Cedula, @Cuenta, @Telefonos)

    FETCH NEXT FROM cursor_telefonos INTO @Cedula, @Cuenta, @Telefonos

นี่ฉันเพิ่งปิดเคอร์เซอร์:

END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos

บางคนรู้ว่าทำไมของฉันในขณะที่วงคือฤติกรรมโรคจิต--การแทรโพรโทคอล aimcomment บโทรศัพท์ใหม่โต๊ะตอนที่มันควรจะเป็นการเพิ่มรายการขอหมายเลขโทรศัพท์ของผู้ชายคนนั้นใช่มั้ย

ขอบคุณมากสำหรับความสนใจของคุณ!!

database database-cursor sql
2021-11-24 02:51:22
1

คำตอบที่ดีที่สุด

0

ถ้าฉันเข้าใจคุณถูกต้องแล้วด้านล่างสามารถเป็นสาเหตุผล

1- ในกรหัสคุณอยู่ที่ไหนจะหาคนที่ชื่อมีหลายหมายเลขโทรศัพท์แล้วก็ได้ที่แตกต่างหมายเลขโทรศัพท์สำหรับนั่นพิเศษคนที่ชื่อหลังจากเข้าร่วมกับ Telefonos_General. (นี่นายควรจะสั้นของคุณข้อมูลที่ระบุถึงแม้ว่าจะมาร่วมกันจะจัดการมันแต่ได้โปรดทำพิสูจน์ความถูกต้องของมัน)

2- ในตัวแปรปล่อยให้เธอได้หายใจอยู่อีกฎว่าคุณอยู่ที่ไหนกำลังกำหนดค่าของเพื่อ Telefonos(โปรดพิสูจน์ความถูกต้องของคนอื่นแถลงการณ์).

โน้ต--ยังสำหรับของคุณใช้กรณีคุณสามารถใช้ข้อความ Aggregate ฟังก์ชันซึ่งจะเพิ่มทั้งหมดหมายเลขโทรศัพท์กับเครื่องหมายแยกเลขหลักจุลภาค. (ฉันมีความเดิมตอนที่แล้วใช้ฟังก์ชันนี้กันสำหรับใช้ในกรณี Postgress แต่ฉันแน่ใจว่าคุณจะเข้าใจมันอยู่ใน mssql เช่นกัน)

เดาว่าคุณมีข้อมูลอย่างด้านล่างนี้

name    date1
 A    2019-03-01
 B    2020-03-01
 A    2021-03-01
 B    2022-03-01
 C    2023-03-01

คุณสามารถใช้ด้านล่าง query

select name,string_agg(date1,',') as merge_date from table_name group by name

เรื่องนี้จะให้คุณ:

name    merge_date
 A    2019-03-01,2021-03-01
 B    2022-03-01,2020-03-01
 C    2023-03-01
2021-11-24 04:51:29

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่