如果ID重复,我必须移动
C(行1)的值到第1列,D(行1)的值到第2列,
C(第2行)的值到第3列,D(第2行)的值到第4列
C(第3行)的值到第5列,D(第3行)的值到第6列
有什么办法可以在sql中完成
谢谢
ID B C D 1 2 3 4 5 6
1 Hat Device1 34
2 Mat Device2 65
3 Cat Device3 76
3 Sat Device4 34
3 Hat Device5 89
4 Hat Device6 23
4 Hat Device7 12
ID B 1 2 3 4 5 6
1 Hat Device1 34
2 Mat Device2 65
3 Cat Device3 76 Device4 34 Device5 89
4 Hat Device6 23
答案 0 :(得分:0)
您可以使用条件聚合:
import numpy as np
x = ['hello', 'John', 'hi', 'John', 'hello', 'pumpum']
vals, ids, idx = np.unique(x, return_index=True, return_inverse=True)
print(idx)
array([1, 0, 2, 0, 1, 3], dtype=int64)
答案 1 :(得分:0)
CREATE TABLE #input (ID INT, B VARCHAR(10), C VARCHAR(15), D INT, [1] VARCHAR(15), [2] INT, [3] VARCHAR(15), [4] INT,[5] VARCHAR(15), [6] INT)
CREATE TABLE #output (ID INT, B VARCHAR(10), [1] VARCHAR(15), [2] INT, [3] VARCHAR(15), [4] INT, [5] VARCHAR(15), [6] INT)
INSERT INTO #input (ID,B,C,D)
VALUES (1,'Hat', 'Device1', 34 )
INSERT INTO #input (ID,B,C,D)
VALUES (2,'Mat', 'Device2', 65 )
INSERT INTO #input (ID,B,C,D)
VALUES (3,'Cat', 'Device3', 76 )
INSERT INTO #input (ID,B,C,D)
VALUES (3,'Sat', 'Device4', 34 )
INSERT INTO #input (ID,B,C,D)
VALUES (3,'Hat', 'Device5', 89 )
INSERT INTO #input (ID,B,C,D)
VALUES (4,'Hat', 'Device6', 76 )
INSERT INTO #input (ID,B,C,D)
VALUES (4,'Hat', 'Device7', 12 )
DECLARE
@id INT,
@b VARCHAR(10),
@c VARCHAR(15),
@d INT
DECLARE input CURSOR FOR SELECT ID, B, C, D FROM #input
OPEN input
FETCH NEXT FROM input INTO @id, @b, @c, @d
WHILE @@fetch_status <> -1
BEGIN
IF @id NOT IN (SELECT ID FROM #output)
BEGIN
INSERT INTO #output (ID,B,[1],[2])
VALUES (@id, @b, @c, @d )
END
ELSE IF @id IN (SELECT ID FROM #output) AND (SELECT [3] FROM #output WHERE ID = @id) IS NULL
BEGIN
UPDATE #output
SET [3] = @c,
[4] = @d
WHERE ID = @id
END
ELSE
BEGIN
UPDATE #output
SET [5] = @c,
[6] = @d
WHERE ID = @id
END
FETCH NEXT FROM input INTO @id, @b, @c, @d
END
CLOSE input
DEALLOCATE input
SELECT * FROM #input
SELECT * FROM #output
DROP TABLE #input
DROP TABLE #output
您可以在这里尝试: