는 문서 SQL 커서를 가져오는 null 값이

0

질문

나는 테이블과 함께 전형적인 값을 다음과 같:식별,전화번호,사람의 이름을 등입니다. 이 테이블의 경우에는 사람은 하나 이상의 전화 번호하는 사람이 나타납니다 여러 번,각 반복으로 다른 전화 번호에 해당하는 사람입니다.

나의 목표를 작성하는 커서를 추가로 모든 다른 휴대폰 사람은 하나의 전화 값에서 새로운 테이블,그들의 각각으로 구분하여','. 에서는 방법으로 각각의 사람이 단 한 번만 나타납에서 테이블,하지만 전화 번호 값이 있는 전화 번호하는 사람이 소유하고있으로 구분하여','.

나는 뭔가 다음과 같다:

여기에서 내가 만드는"정상"표 그 사람 정보해야하려면:

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

이것은 일시적인 테이블을 선택 사람 ID 와 반복되는 여러 번,그것을 의미하는 여러 전화번호(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 으로 null 이면(@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

누군가가 이유를 알아 내 while 삽입 null 에 새로운 휴대폰 표해야 할 경우 이러한 목록의 추가 전화 번호의 사람입니까?

감사에 대한 많은 관심!!

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

최고의 응답

0

는 경우 이해 당신은 올바른 다음 아래할 수 있습 가능한 이유입니다.

1- 코드에 당신을 찾는 사람 id 를 여러 전화 번호를 다 점점 다른 전화번호는 특정 사용자 id 가입 한 후 그것을 Telefonos_General. (여기서 당신은 짧은 당신의 데이터에 사람 id 지만인 것입니다 그것을 다시 확인)

2- 에 변수를 선언 코드에 당신은 값을 할당 Telefonos(를 확인해 주시기 바랍 else statement).

참고하시고 또한 당신의 사용을 위해 경우 사용할 수 있는 문자열 집계 기능을 추가할 것입니다 모든 전화 번호를 쉼표로 구분 기호입니다. (난 그 이전에 이 기능을 사용에 대한 동일한 사용할 경우에 Postgress 그러나 나는 당신이 그것을 얻을 mssql 뿐만 아니라.)

가정을 아래와 같이 데이터

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

아래에 사용할 수 있습 쿼리

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ý
..................................................................................................................