程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLServer建立交叉表查詢

SQLServer建立交叉表查詢

編輯:關於SqlServer

     /*
    使用方法,直接執行,傳入參數(series_guid, 查詢條件)返回一個數據集
    如:
    查詢該系列Cylindrical1下所有產品
    dbo.P_GetSeriesProductDetail 'Cylindrical1',''
    查詢系列Cylindrical1下含有BK-1的產品
    dbo.P_GetSeriesProductDetail 'Cylindrical1','product_name like ''%BK-1%'''
    */
    CREATE PROCEDURE P_GetSeriesProductDetail(@series_guid varchar(40), @condition varchar(1000))
    AS
    DECLARE @ParamNo nvarchar(5)
    DECLARE @SQL nvarchar(4000)
    Set @SQL=''
    DECLARE P_cursor CURSOR
    local
    fast_forward
    FOR SELECT param_no FROM V_product_params where series_guid=@series_guid
    OPEN P_cursor


    FETCH next FROM P_cursor INTO @ParamNo
    WHILE (@@fetch_status = 0)
    BEGIN
    Set @SQL = @SQL + ',MAX(CASE param_no WHEN ' + @ParamNo + ' THEN param_value ELSE '''' END) AS F' + @ParamNo + char(13)
    FETCH next FROM P_cursor INTO @ParamNo
    END


    CLOSE P_cursor
    DEALLOCATE P_cursor
    Set @SQL='SELECT type_guid, series_guid, product_no, product_name' + @SQL + '
    FROM V_product_params WHERE series_guid=''' + @series_guid + ''''
    if (LTrim(@condition)<>'')
    Set @SQL= @SQL + ' and ' + @condition
    Set @SQL= @SQL + '
    GROUP BY type_guid, series_guid, product_no, product_name'


    Print @SQL
    Execute sp_executesql @SQL

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved