SQL Server 2008,在用例时插入日期

时间:2015-11-24 14:58:18

标签: sql-server

我有这张桌子

╔═════════╦═══════╦═══════════════════╗
║ COMPANY ║ NAME  ║       DATE        ║
╠═════════╬═══════╬═══════════════════╣
║ A       ║ Roger ║ 4/17/2015 0:00:00 ║
║ B       ║ Larry ║ 4/9/2015 0:00:00  ║
║ C       ║ Paul  ║ 4/9/2015 0:00:00  ║
║ D       ║ Scott ║ 4/24/2015 0:00:00 ║
╚═════════╩═══════╩═══════════════════╝

我想使表格看起来像

╔═════════╦═══════════════════╦══════════════════╦══════════════════╦═══════════════════╗
║ COMPANY ║       Roger       ║      Larry       ║       Paul       ║       Scott       ║
╠═════════╬═══════════════════╬══════════════════╬══════════════════╬═══════════════════╣
║ A       ║ 4/17/2015 0:00:00 ║ -                ║ -                ║ -                 ║
║ B       ║ -                 ║ 4/9/2015 0:00:00 ║ -                ║ -                 ║
║ C       ║ -                 ║ -                ║ 4/9/2015 0:00:00 ║ -                 ║
║ D       ║ -                 ║ -                ║ -                ║ 4/24/2015 0:00:00 ║
╚═════════╩═══════════════════╩══════════════════╩══════════════════╩═══════════════════╝

所以我尝试了这个,但它没有插入日期,任何想法?

SELECT DISTINCT 
    (company),
    [Roger]  = (CASE WHEN [str_lastname] = 'Roger' THEN 'date' ELSE '-' END),
    [Larry]  = (CASE WHEN [str_lastname] = 'Larry' THEN 'date' ELSE '-' END),
    [Paul]  = (CASE WHEN [str_lastname] = 'Paul' THEN 'date' ELSE '-' END),
    [Scott]  = (CASE WHEN [str_lastname] = 'Scott' THEN 'date' ELSE '-' END)
FROM 
    #temp1

它会从列中插入日期而不是实际日期。

感谢任何帮助

2 个答案:

答案 0 :(得分:0)

DECLARE @stuff TABLE 
  ( 
     company  CHAR(1) NULL, 
     NAME     VARCHAR(20) NULL, 
     somedate DATETIME NULL 
  ) 

INSERT INTO @stuff 
            (company, 
             NAME, 
             somedate) 
VALUES     ('A', 
            'Roger', 
            '04/17/2015') 

INSERT INTO @stuff 
            (company, 
             NAME, 
             somedate) 
VALUES     ('B', 
            'Larry', 
            '04/9/2015') 

INSERT INTO @stuff 
            (company, 
             NAME, 
             somedate) 
VALUES     ('C', 
            'Paul', 
            '04/9/2015') 

INSERT INTO @stuff 
            (company, 
             NAME, 
             somedate) 
VALUES     ('D', 
            'Scott', 
            '04/24/2015') 

SELECT DISTINCT ( company ), 
                [Roger] = ( CASE 
                              WHEN[name] = 'Roger' THEN Cast( 
                              [somedate] AS VARCHAR) 
                              ELSE '-' 
                            END ), 
                [Larry] = ( CASE 
                              WHEN[name] = 'Larry' THEN Cast( 
                              [somedate] AS VARCHAR) 
                              ELSE '-' 
                            END ), 
                [Paul] = ( CASE 
                             WHEN[name] = 'Paul' THEN Cast([somedate] AS VARCHAR 
                                                      ) 
                             ELSE '-' 
                           END ), 
                [Scott] = ( CASE 
                              WHEN[name] = 'Scott' THEN Cast( 
                              [somedate] AS VARCHAR) 
                              ELSE '-' 
                            END ) 
FROM   @stuff 

产生这个: SQL Output

答案 1 :(得分:0)

SELECT
    COMPANY,
    MAX(CASE
        WHEN NAME = 'Roger' THEN CONVERT(varchar, [DATE])
        ELSE '-'
    END) Roger,
    MAX(CASE
        WHEN NAME = 'Larry' THEN CONVERT(varchar, [DATE])
        ELSE '-'
    END) Larry,
    MAX(CASE
        WHEN NAME = 'Paul' THEN CONVERT(varchar, [DATE])
        ELSE '-'
    END) Paul,
    MAX(CASE
        WHEN NAME = 'Scott' THEN CONVERT(varchar, [DATE])
        ELSE '-'
    END) Scott
FROM
    SourceTable
GROUP BY
    COMPANY;

或者只是更改' date'你所拥有的CONVERT(varchar,[DATE])。由于每个名称仅与一个公司相关,因此您实际上并不需要我所展示的GROUP。这只是我用于转动'的标准技术。这样的数据。