小弟现在有一语法,
ALTER PROC BB_FY_BRFY
( @ksrq VARCHAR(8) ,
  @jsrq VARCHAR(8) ,
  @zyh VARCHAR(11) = '' )
AS 
DECLARE @sql VARCHAR(8000)
DECLARE @sql_par1 VARCHAR(50)
DECLARE @ks VARCHAR(8)
DECLARE @js VARCHAR(8)
SET @ks = @ksrq
SET @js = @jsrq
SET @sql_par1 = ''
WHILE ( CAST(@ks AS DATETIME) <= CAST(@js AS DATETIME) ) 
    BEGIN
        SET @sql = +ISNULL(@sql + '],[', '') + @ks
        SET @ks = CONVERT(VARCHAR(8), DATEADD(dd, 1, CAST(@ks AS DATETIME)), 112)
    END
SET @sql = '[' + @sql + ']'
        
IF ( @zyh <> '' ) 
    BEGIN
        SET @sql_par1 = ' AND 住院号=''' + @zyh + ''''
    END
    
SET @sql = 'select * from(
select 住院号,费用日期,SUM(金额) AS 金额 from 住院_病人费用流水帐
WHERE 费用日期 BETWEEN ''' + @ksrq + ''' AND ''' + @jsrq + '''' + @sql_par1 + 'GROUP BY 住院号,费用日期) p
Pivot (
sum(金额)
FOR 费用日期 IN
( ' + @sql + '))
as pvt 'PRINT ( @sql )
EXEC(@sql)传参呢,只能传日期,然后显示出来的就是,比如我传一个,'20120101','20130101' 这样呢保证能把这一年的数据都取全了,但是显示出来的列就会有365列,其实我只需要显示病人30天的费用就行了,并不一定需要是几号用了多少钱,只要是第一天多少钱,第二天多少钱这种格式也可以的。sqlpivot