Asp.net 在SQL Server 2008 R2上将列转换为行
我编写了一个查询,需要用于从asp.net SQL命令导出到Excel文件,但首先我只想将列转置到行,我尝试使用pivot,但它不起作用 我写了一个这样的查询Asp.net 在SQL Server 2008 R2上将列转换为行,asp.net,sql-server,excel,sql-server-2008-r2,pivot,Asp.net,Sql Server,Excel,Sql Server 2008 R2,Pivot,我编写了一个查询,需要用于从asp.net SQL命令导出到Excel文件,但首先我只想将列转置到行,我尝试使用pivot,但它不起作用 我写了一个这样的查询 SELECT CATAGORY_NAME,GROUP_NAME,FUNCTION_NAME,'G'+TEST_CASE.GID + '-TC'+TEST_CASE.CASE_ID CASE_ID,CASE_NAME,CASE_NAME_TH,EXPECT_RESULT,EXPECT_DETAIL,INTERFACE,RESULT,
SELECT CATAGORY_NAME,GROUP_NAME,FUNCTION_NAME,'G'+TEST_CASE.GID + '-TC'+TEST_CASE.CASE_ID CASE_ID,CASE_NAME,CASE_NAME_TH,EXPECT_RESULT,EXPECT_DETAIL,INTERFACE,RESULT,TEST_DATE,TEST_BY,REMARK
FROM TEST_CASE
LEFT OUTER JOIN TEST_CATAGORY
ON TEST_CASE.CID = TEST_CATAGORY.CID
AND TEST_CASE.SID = TEST_CATAGORY.SID
LEFT OUTER JOIN TEST_GROUP ON TEST_CASE.GID = TEST_GROUP.GID AND TEST_CASE.CID = TEST_GROUP.CID WHERE TEST_CASE.SID = 1 ORDER BY TEST_CASE.CID
它很好用,我需要按类别名称转换它们
from(示例from all,因为它有许多列)
到
来自查询的表数据
CATAGORY_NAME GROUP_NAME FUNCTION_NAME CASE_ID CASE_NAME EXPECT_RESULT INTERFACE RESULT TEST_DATE TEST_BY REMARK
Desbes Optivy TESTING125 FAST CASH G01-TC00101 Fast Rejected VISA N/R 12-ธ.ค.-14 Tester1 4012999971111142 4012999971111142
IBM Omron ADM3 (S1G366932) VISA Chip (Single App) FAST CASH G03-TC00501 Fast Approved VISA PASS 11-ธ.ค.-14 Tester1 4761340000000035 4761340000000035
Wincor PC280 (S1A365305) Abnormal SCB Card Abnormal Fast cash G28-TC11804 Inactive status Rejected CBS PASS 25-ธ.ค.-14 tester3 5.57755E+15
Wincor PC280 (S1A365305) Abnormal VISA Magnetic Abnormal Withdrawal G30-TC15402 Do not input amount Rejected #NAME? BASE24 PASS tester3
结核病测试个案
SID CID GID CASE_ID FUNCTION_NAME CASE_NAME CASE_NAME_TH TEST_CARD CONDITION EXPECT_RESULT ACTUAL_RESULT SEQ TEST_BY TEST_DATE REMARK RESULT INTERFACE TEMPLATE_NAME RETEST_DATE
1 1 1 101 FAST CASH Fast cash - 200 FASTCAS 12345 NULL Rejected Approved 20-21 TESTER1 12-ธ.ค.-14 TEST N/R VISA Recycle ;PN13 Jan 15
1 1 1 102 FAST CASH Fast cash - 500 FASTCAS 12345 NULL Approved Approved 22-23 TESTER2 12-ธ.ค.-14 TEST PASS VISA Recycle NULL
1 1 1 103 FAST CASH Fast cash - 1,000 FASTCAS 12345 NULL Approved Approved 26-27 TESTER3 12-ธ.ค.-14 TEST PASS VISA Recycle NULL
结核病测试分类
SID CID CATAGORY_NAME INFO_1 INFO_2 INFO_3 INFO_4 INFO_5 TEMPLATE_NAME INFO_L1 INFO_L2 INFO_L3 INFO_L4 INFO_L5
1 1 Diebold Optiva378 (S1G366937) S1G366937 Diebold Win7 $DATA.AT401000.CDMD3IN1 Optiva378 Recycle Term Vendor OS CI File NULL
1 2 NCR S6622E (S1G365311) S1G365311 NCR Win7 $DATA.AT40N50. CI587IPF S6622E ATM Full Term Vendor OS CI File NULL
1 3 Wincor PC1500XE (S1A365303) S1A365303 Wincor XP $DATA.AT401000. CIWINCOR PC 1500XE ATM Partial Term Vendor OS CI File NULL
1 4 IBM Nautilus CD4 (S1G365306) S1G365306 IBM XP $DATA.AT401000. OMIP02 Nautilus ATM Partial Term Vendor OS CI File NULL
结核病测试组
SID CID GID GROUP_NAME GROUP_CODE TEMPLATE_NAME
1 01 VISA Magnetic NULL ATM Full
1 01 VISA Magnetic NULL ATM Multi
1 01 VISA Magnetic NULL ATM Partial
1 01 VISA Magnetic NULL Existing ATM
1 01 VISA Magnetic NULL Existing CDM
1 01 VISA Magnetic NULL Existing Multi
1 01 VISA Magnetic NULL Existing Recycle
1 01 VISA Magnetic NULL Recycle
1 02 VISA Chip-Fallback NULL ATM Full
1 02 VISA Chip-Fallback NULL ATM Multi
1 02 VISA Chip-Fallback NULL ATM Partial
1 02 VISA Chip NULL Existing ATM
1 02 VISA Chip NULL Existing CDM
1 02 VISA Chip NULL Existing Multi
1 02 VISA Chip NULL Existing Recycle
1 02 VISA Chip-Fallback NULL Recycle
1 03 VISA Chip (Single App) NULL ATM Full
1 03 VISA Chip (Single App) NULL ATM Multi
1 03 VISA Chip (Single App) NULL ATM Partial
1 03 MDS Magnetic NULL Existing ATM
1 03 MDS Magnetic NULL Existing CDM
1 03 MDS Magnetic NULL Existing Multi
1 03 MDS Magnetic NULL Existing Recycle
1 03 VISA Chip (Single App) NULL Recycle
1 04 VISA Chip (Multi App) NULL ATM Full
1 04 VISA Chip (Multi App) NULL ATM Multi
1 04 VISA Chip (Multi App) NULL ATM Partial
1 04 MDS Chip NULL Existing ATM
1 04 MDS Chip NULL Existing CDM
1 04 MDS Chip NULL Existing Multi
1 04 MDS Chip NULL Existing Recycle
1 04 VISA Chip (Multi App) NULL Recycle
1 05 MDS Magnetic NULL ATM Full
试试这个
SELECT 'CATAGORY_NAME' COL,CATAGORY_NAME
FROM Yourtable
UNION ALL
SELECT 'GROUP_NAME',GROUP_NAME
FROM Yourtable
UNION ALL
SELECT 'FUNCTION_NAME',FUNCTION_NAME
FROM Yourtable
UNION ALL
SELECT 'CASE_ID',CASE_ID
FROM Yourtable
编辑:
对于您更新的问题,可以遵循以下方法
样本表
CREATE TABLE #TEMP(CATAGORY_NAME VARCHAR(200),GROUP_NAME VARCHAR(200), FUNCTION_NAME VARCHAR(200),CASE_ID VARCHAR(200))
INSERT INTO #TEMP
SELECT 'Desbes Optivy', 'TESTING125', 'FAST CASH' , 'G01-TC00101'
UNION ALL
SELECT 'IBM Omron ADM3 (S1G366932)', 'VISA Chip (Single App)', 'FAST CASH', 'G03-TC00501'
UNION ALL
SELECT 'Wincor PC280 (S1A365305)', 'Abnormal SCB Card', 'Abnormal Fast cash', 'G28-TC11804'
UNION ALL
SELECT 'Wincor PC280 (S1A365305)', 'Abnormal VISA Magnetic', 'Abnormal Withdrawal', 'G30-TC15402'
查询
;WITH CTE AS
(
-- Here we get a unique id for each row
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT(0))) RNO,*
FROM #TEMP
)
,CTE2 AS
(
-- Hardcode the column names
SELECT 'CATAGORY NAME' COL,CATAGORY_NAME,RNO
FROM CTE
UNION ALL
SELECT 'GROUP NAME',GROUP_NAME,RNO
FROM CTE
UNION ALL
SELECT 'FUNCTION NAME',FUNCTION_NAME,RNO
FROM CTE
UNION ALL
SELECT 'CASE ID',CASE_ID,RNO
FROM CTE
)
-- Select all the data and order by a column according to our logic
-- Row number gets you unique id for each rows
SELECT * FROM CTE2
ORDER BY RNO,
CASE WHEN COL = 'CATAGORY NAME' THEN 1
WHEN COL = 'GROUP NAME' THEN 2
WHEN COL = 'FUNCTION NAME' THEN 3
WHEN COL = 'CASE ID' THEN 4
END
编辑2:
试试这个
;WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY TEST_CASE.CID) RNO,
CATAGORY_NAME,GROUP_NAME,FUNCTION_NAME,
'G'+TEST_CASE.GID + '-TC'+TEST_CASE.CASE_ID CASE_ID,
CASE_NAME,CASE_NAME_TH,EXPECT_RESULT,EXPECT_DETAIL,
INTERFACE,RESULT,TEST_DATE,TEST_BY,REMARK
FROM TEST_CASE
LEFT OUTER JOIN TEST_CATAGORY
ON TEST_CASE.CID = TEST_CATAGORY.CID
AND TEST_CASE.SID = TEST_CATAGORY.SID
LEFT OUTER JOIN TEST_GROUP ON TEST_CASE.GID = TEST_GROUP.GID AND
TEST_CASE.CID = TEST_GROUP.CID WHERE TEST_CASE.SID = 1
)
,CTE2 AS
(
-- Hardcode the column names
SELECT 'CATAGORY NAME' COL,CATAGORY_NAME,RNO
FROM CTE
UNION ALL
SELECT 'GROUP NAME',GROUP_NAME,RNO
FROM CTE
UNION ALL
SELECT 'FUNCTION NAME',FUNCTION_NAME,RNO
FROM CTE
UNION ALL
SELECT 'CASE ID',CASE_ID,RNO
FROM CTE
)
-- Select all the data and order by a column according to our logic
-- Row number gets you unique id for each rows
SELECT * FROM CTE2
ORDER BY RNO,
CASE WHEN COL = 'CATAGORY NAME' THEN 1
WHEN COL = 'GROUP NAME' THEN 2
WHEN COL = 'FUNCTION NAME' THEN 3
WHEN COL = 'CASE ID' THEN 4
END
我将使用
交叉应用
来取消打印结果
SELECT column_name,
data
FROM result
CROSS apply (VALUES ('CATAGORY_NAME',CATAGORY_NAME),
('GROUP_NAME',GROUP_NAME),
('FUNCTION_NAME',FUNCTION_NAME),
('CASE_ID',CONVERT(VARCHAR(50), CASE_ID))) cs(column_name, data)
谢谢,但它只是将所有内容都放在一个列中,就像这个类别名称12345类别名称12346类别名称12347类别名称12348Oh一样。您需要在一列中列出所有内容吗@touchchai euapermchokchai很抱歉没有明确的问题,我需要他们按类别名称分开
类别名称TS12345组名称TDAS函数名称编号CASE ID 1234
您能编辑您的问题并添加源表@touchchai euapermchokchai非常感谢@Sarath它的工作就像一个魅力一样我的下一个解决方案是导出吗他们可以通过分类名称作为工作表来超越,但这是可行的!谢谢,但我不知道如何申请我的查询
;WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY TEST_CASE.CID) RNO,
CATAGORY_NAME,GROUP_NAME,FUNCTION_NAME,
'G'+TEST_CASE.GID + '-TC'+TEST_CASE.CASE_ID CASE_ID,
CASE_NAME,CASE_NAME_TH,EXPECT_RESULT,EXPECT_DETAIL,
INTERFACE,RESULT,TEST_DATE,TEST_BY,REMARK
FROM TEST_CASE
LEFT OUTER JOIN TEST_CATAGORY
ON TEST_CASE.CID = TEST_CATAGORY.CID
AND TEST_CASE.SID = TEST_CATAGORY.SID
LEFT OUTER JOIN TEST_GROUP ON TEST_CASE.GID = TEST_GROUP.GID AND
TEST_CASE.CID = TEST_GROUP.CID WHERE TEST_CASE.SID = 1
)
,CTE2 AS
(
-- Hardcode the column names
SELECT 'CATAGORY NAME' COL,CATAGORY_NAME,RNO
FROM CTE
UNION ALL
SELECT 'GROUP NAME',GROUP_NAME,RNO
FROM CTE
UNION ALL
SELECT 'FUNCTION NAME',FUNCTION_NAME,RNO
FROM CTE
UNION ALL
SELECT 'CASE ID',CASE_ID,RNO
FROM CTE
)
-- Select all the data and order by a column according to our logic
-- Row number gets you unique id for each rows
SELECT * FROM CTE2
ORDER BY RNO,
CASE WHEN COL = 'CATAGORY NAME' THEN 1
WHEN COL = 'GROUP NAME' THEN 2
WHEN COL = 'FUNCTION NAME' THEN 3
WHEN COL = 'CASE ID' THEN 4
END
SELECT column_name,
data
FROM result
CROSS apply (VALUES ('CATAGORY_NAME',CATAGORY_NAME),
('GROUP_NAME',GROUP_NAME),
('FUNCTION_NAME',FUNCTION_NAME),
('CASE_ID',CONVERT(VARCHAR(50), CASE_ID))) cs(column_name, data)