Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

sql:giá trị của hàng dưới dạng cột

Vấn đề của bạn có thể được giải quyết bằng cách sử dụng Tính năng quay vòng động. Vui lòng xem xét điều này bài báo

Hãy thử điều này

DECLARE @t TABLE(Id_Contract INT, Dt DATETIME,Amount INT)
INSERT INTO @t SELECT 1,'2012-01-01 00:00:00.000',500
INSERT INTO @t SELECT 1,'2012-03-01 00:00:00.000',450
INSERT INTO @t SELECT 2,'2012-09-01 00:00:00.000',300
INSERT INTO @t SELECT 3,'2012-08-01 00:00:00.000',750

DECLARE @cols AS VARCHAR(MAX), @query  AS VARCHAR(MAX);

SELECT 
    Id_Contract
    , LEFT(DATENAME(month,Dt),3) + ' ' + DATENAME(Year,Dt) AS Month_Year_Name
    ,Amount
INTO #Temp
FROM @t 
WHERE Dt BETWEEN  '01/01/2012' AND '03/31/2012'

SELECT  @cols = STUFF(( SELECT DISTINCT 
                               '],[' +   t2.Month_Year_Name
                        FROM    #Temp AS t2
                        ORDER BY '],[' + t2.Month_Year_Name
                        FOR XML PATH('')
                      ), 1, 2, '') + ']'

SET @query = 'SELECT Id_Contract, ' + @cols + ' FROM 
            (
                SELECT
                     Id_Contract
                    , Amount
                    , Month_Year_Name
                FROM #Temp
           ) x
            PIVOT 
            (
                 MAX(amount)
                 FOR Month_Year_Name in (' + @cols + ')
            ) p '
EXECUTE(@query)
DROP TABLE #Temp

// Kết quả

Id_Contract Jan 2012    Mar 2012
1           500         450

Chỉnh sửa

Đối với dữ liệu thử nghiệm của bạn,

DECLARE @t TABLE(Id_Contract INT, Dt DATETIME,Amount INT) 
INSERT INTO @t SELECT 1,'2012-01-01 00:00:00.000',500 
INSERT INTO @t SELECT 1,'2012-03-01 00:00:00.000',450 
INSERT INTO @t SELECT 2,'2012-03-01 00:00:00.000',450 
INSERT INTO @t SELECT 3,'2012-08-01 00:00:00.000',750 

đầu ra là

Id_Contract Jan 2012    Mar 2012
1              500          450
2              NULL         450

Hãy cho tôi biết nếu nó đáp ứng yêu cầu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:chỉ viết hoa chữ cái đầu tiên

  2. SQL Server:Nhận khóa chính của bảng bằng truy vấn sql

  3. Làm thế nào để tạo chỉ mục cho một cột chuỗi trong sql?

  4. Ràng buộc Kiểm tra có thể liên quan đến một bảng khác không?

  5. Làm cách nào để đánh dấu một từ trong gridview