我在excel表格中有这样的数据:
Number 123456
name John
province Quebec
Number 458965
name sammy
province ontario
我想将数据转置为行。
我想通过导入SQL server
文件在excel
中进行此操作。
现在,我正在寻找一个SQL查询,该查询可以为我提供如下所示的输出。一种方法可以是,当查询检测到Number
字段名时,它应该将数据转置为行,直到出现下一个Number
字段为止。输出如下所示。
Number name province client type
答案 0 :(得分:0)
我敢肯定有一种更有效的方法,但是一旦在临时表中将数据存储在SQL中(我只是一起破解了一种方法,可以通过生成插入语句在Excel工作簿中完成此操作)如果没有其他更简便的方法)...
DECLARE @tblData TABLE
(
iRowNo int identity(1,1),
sField nvarchar(100),
sValue nvarchar(1000)
)
INSERT INTO @tblData VALUES ('Number', '123456')
INSERT INTO @tblData VALUES ('name', 'John')
INSERT INTO @tblData VALUES ('province', 'Quebec')
INSERT INTO @tblData VALUES ('client', 'Client 1')
INSERT INTO @tblData VALUES ('type', 'Type 1')
INSERT INTO @tblData VALUES ('Number', '458965')
INSERT INTO @tblData VALUES ('name', 'sammy')
INSERT INTO @tblData VALUES ('province', 'ontario')
INSERT INTO @tblData VALUES ('client', 'Client 2')
INSERT INTO @tblData VALUES ('type', 'Type 2')
...您可以尝试以下查询...
SELECT iRowNo, sValue AS Number,
Name = (SELECT TOP (1) B.sValue FROM @tblData AS B WHERE B.sField = 'name' AND B.iRowNo > A.iRowNo ORDER BY iRowNo),
Province = (SELECT TOP (1) B.sValue FROM @tblData AS B WHERE B.sField = 'province' AND B.iRowNo > A.iRowNo ORDER BY iRowNo),
Client = (SELECT TOP (1) B.sValue FROM @tblData AS B WHERE B.sField = 'client' AND B.iRowNo > A.iRowNo ORDER BY iRowNo),
Type = (SELECT TOP (1) B.sValue FROM @tblData AS B WHERE B.sField = 'type' AND B.iRowNo > A.iRowNo ORDER BY iRowNo)
FROM @tblData AS A
WHERE sField = 'Number'
...给了我下面的结果...
...不确定是否有帮助,但根据您的要求,我认为这是您要寻找的结果。
我必须承认,大约8年前,我在SQL方面很沉重,因此在这个新的时代可能有更好的方法,或者也许总是这样。 :-)
无论如何,值得一试...!