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

Không nhận được các giá trị SUM chính xác trong SQL Server 2012 khi sử dụng PIVOT

Truy vấn sau sẽ cung cấp cho bạn những gì bạn muốn:

SELECT Store,
       TotalSold,
       [John] AS WastedByJohn,
       [Jim] AS WastedByJim,
       [Alex] AS WastedByAlex
FROM (SELECT Store, Employee, Waste,
             SUM(Sold) OVER (PARTITION BY Store) AS TotalSold
      FROM #Foo) src
PIVOT
    (SUM(Waste)
     FOR Employee IN ([John], [Jim], [Alex])
    ) PVT

Để hiểu tại sao bạn nhận được kết quả không mong muốn, hãy thử truy vấn của bạn mà không có GROUP BY mệnh đề:

SELECT Store, Sold, [John], [Jim], [Alex]
FROM 
    #Foo
PIVOT
    (SUM(Waste)
     FOR Employee IN ([John], [Jim], [Alex])
    ) PVT

Đầu ra:

Store       Sold    John    Jim     Alex
Harrisburg  20,00   20,00   10,00   NULL
Seattle     20,00   NULL    10,00   10,00

Bây giờ, hãy thử lại tương tự với phiên bản thứ hai của dữ liệu mẫu:

Đầu ra:

Store       Sold    John    Jim     Alex
Harrisburg  25,00   10,00   NULL    NULL
Harrisburg  30,00   10,00   NULL    NULL
Harrisburg  40,00   NULL    10,00   NULL
Seattle     50,00   NULL    10,00   NULL
Seattle     60,00   NULL    NULL    10,00

Bằng cách so sánh 2 bộ kết quả khác nhau, bạn có thể thấy rõ rằng PIVOT diễn ra cho mọi kết hợp cột không tham gia vào nó, tức là cho mọi kết hợp Store , Sold .

Trong trường hợp đầu tiên, chỉ có Harrisburg,20,00Seattle,20,00 . Đó là lý do tại sao bạn chỉ nhận được hai hàng trong trường hợp này. Trong trường hợp thứ hai, bạn có tổng số 3 + 2 =5 kết hợp.

Bây giờ bạn có thể thấy lý do tại sao GROUP BY chỉ hoạt động trong trường hợp thứ hai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gói SSIS không thành công với lỗi Nếu trình điều khiển 64 bit không được cài đặt, hãy chạy ở chế độ 32 bit

  2. Điền các ngày còn thiếu theo nhóm

  3. Tại sao tham gia bên trái của tôi không trả về null?

  4. Quyền của SQL để Thêm dữ liệu và cách xác minh?

  5. Giải thích về ANSI_NULLS của Máy chủ SQL