Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在SQL Server 2008 R2上将列转换为行_Asp.net_Sql Server_Excel_Sql Server 2008 R2_Pivot - Fatal编程技术网

Asp.net 在SQL Server 2008 R2上将列转换为行

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,

我编写了一个查询,需要用于从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,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)