SELECT COUNT(RegisterCode) AS 隱患總數,
SUM(CASE WHEN ResultStatus = '已整改' THEN 1 ELSE 0 END) AS 已整改合計,
SUM(CASE WHEN ResultStatus = '未整改' THEN 1 ELSE 0 END) AS 未整改合計,
SUM(CASE WHEN ResultStatus = '未復查' THEN 1 ELSE 0 END) AS 未復查合計,
COUNT(PunishID) AS 處罰通報合計,
SUM(PTM) AS 隊組罰金合計,
SUM(PPM) AS 個人罰金合計
FROM View_HiddCollect
WHERE CKDate BETWEEN '2014-10-01' AND '2014-10-31'
以上SQL陳述句的結果如下圖所示:

現在想根據以上結果,顯示成這樣,如圖:

請問,SQL陳述句應該怎樣寫?
后附:
View_HiddCollect的代碼:
ALTER VIEW [dbo].[VIEW_HiddCollect]
AS
SELECT DATEPART(YEAR, A.CheckDate) AS YearValue,
DATEPART(MONTH, A.CheckDate) AS MonthValue,
A.CheckPlace,
A.RegisterCode,
A.CheckDate AS CKDate,
A.ResultStatus,
PunishID,
ISNULL(PTM,0) AS PTM,
ISNULL(PPM,0) AS PPM
FROM HiddenMaster A
LEFT JOIN (SELECT RegisterCode,
PunishID,
SUM(ISNULL(PunishTeamMoney, 0)) AS PTM,
SUM(ISNULL(PunishPersonMoney, 0)) AS PPM
FROM HiddenPunish
GROUP BY RegisterCode, PunishID) AS B
ON (A.RegisterCode = B.RegisterCode)
GO
使用的資料庫是SQL Server 2008,在Delphi中使用。
uj5u.com熱心網友回復:
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.htmluj5u.com熱心網友回復:
樓上提供的地址, 講的好詳細~pivot函式需要 MSSQL 2005 或者以上版本才提供
你也可以用最簡單的辦法, 將你每個列的查詢結果作為一個欄位, 然后select 連接起來, 這樣在mssql2000, mysql里面都適用
不過這樣的話, sql陳述句會很長。。。
uj5u.com熱心網友回復:
建議另行建立一個表,欄位就是 序號 隱患排查情況 排查情況值。將搜索結果錄入(傳入),列印(顯示)即可。
uj5u.com熱心網友回復:
讀出來顯示在表格里。uj5u.com熱心網友回復:
SELECT '隱患總數' AS 隱患排查情況,COUNT(RegisterCode) AS 隱患總數FROM View_HiddCollect
WHERE CKDate BETWEEN '2014-10-01' AND '2014-10-31'
union all
SELECT (CASE WHEN ResultStatus = '已整改' THEN '已整改合計',
WHEN ResultStatus = '未整改' THEN '未整改合計',
WHEN ResultStatus = '未復查' THEN '未復查合計' ELSE '') AS 隱患排查情況,
COUNT(RegisterCode) AS 隱患總數
FROM View_HiddCollect
WHERE CKDate BETWEEN '2014-10-01' AND '2014-10-31'
Group By ResultStatus
union all
SELECT '處罰通報合計' AS 隱患排查情況,COUNT(PunishID) AS 隱患總數
FROM View_HiddCollect
WHERE CKDate BETWEEN '2014-10-01' AND '2014-10-31'
union all
SELECT '隊組罰金合計' AS 隱患排查情況,SUM(PTM) AS 隱患總數
FROM View_HiddCollect
WHERE CKDate BETWEEN '2014-10-01' AND '2014-10-31'
union all
SELECT '個人罰金合計' AS 隱患排查情況,SUM(PPM) AS 隱患總數
FROM View_HiddCollect
WHERE CKDate BETWEEN '2014-10-01' AND '2014-10-31'
至于前面的序號,我一般都是用一個自定義列,然后將RECNO顯示上去
如果非得用SQL實作,好像是有一個{ROW NUMBER}的變數可以參考,我未試過,到SQL論壇找大神解決一下
uj5u.com熱心網友回復:
SQL語法中還有大神用遞回解決這些問題,可惜我是學藝不精,看都看不懂
uj5u.com熱心網友回復:
doloopcn,謝謝您的回復,這個問題我解決了,不過還是謝謝您和其他網友的回復順便說一下,doloopcn,您的回復里,SQL Server里提示“,附近有語法錯誤”。我SQL極為垃圾,不會改。
uj5u.com熱心網友回復:
樓主可以搜索一個行列互換相關資料,應該可以解決你的問題.轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/90323.html
標籤:數據庫相關
上一篇:有人用過利用api把外部程式的dlgdirlist默認目錄重新設定過嗎
下一篇:memo文本替換for回圈
