星期六, 11月 27, 2010

[SQL] PIVOT 和 UNPIVOT

  • 說明:
產生ㄧ個2維PIVOT來幫助自己,免的每次要用它還要重新理解ㄧ次。
    • 簡介:
    PIVOT 將資料行內資料的唯一值旋轉成多個資料行,並對數值型欄位進行彙總(直轉橫)。
    UNPIVOT則是跟PIVOT相反(橫轉直)。PS:資料行(Column)、資料列 (Row)。
    -- 1.1 利用個人出勤表來進行說明。
    -- 1.2 假別:事假、病假、公假和陪產假。
    -- 1.3 #PIVOT 用來說明 PIVOT;#UNPIVOT 用來說明 UNPIVOT。
    -- 1.4 備註:#PIVOT 有兩筆時數為NULL的資料;
    --           #UNPIVOT AAAAA 員工陪產假為NULL、BBBBB 員工公假為0。
    CREATE TABLE #PIVOT (Employee char(8),Date datetime,Kind char(10),Hours numeric(4,2))
    INSERT INTO #PIVOT VALUES ('AAAAA','20101001','事假',3.0)
    INSERT INTO #PIVOT VALUES ('AAAAA','20101002','事假',8.0)
    INSERT INTO #PIVOT VALUES ('AAAAA','20101003','事假',4.0)
    INSERT INTO #PIVOT VALUES ('AAAAA','20101010','病假',8.0)
    INSERT INTO #PIVOT VALUES ('AAAAA','20101020','病假',1.0)
    INSERT INTO #PIVOT VALUES ('AAAAA','20101025','公假',8.0)
    INSERT INTO #PIVOT VALUES ('AAAAA','20101026','公假',8.0)
    INSERT INTO #PIVOT VALUES ('AAAAA','20101027','公假',8.0)
    INSERT INTO #PIVOT VALUES ('AAAAA','20101027','公假',NULL)
    INSERT INTO #PIVOT VALUES ('BBBBB','20101001','事假',6.0)
    INSERT INTO #PIVOT VALUES ('BBBBB','20101009','病假',8.0)
    INSERT INTO #PIVOT VALUES ('BBBBB','20101019','病假',8.0)
    INSERT INTO #PIVOT VALUES ('BBBBB','20101019','病假',NULL)
    INSERT INTO #PIVOT VALUES ('BBBBB','20101025','陪產假',8.0)
    INSERT INTO #PIVOT VALUES ('BBBBB','20101026','陪產假',8.0)
    INSERT INTO #PIVOT VALUES ('BBBBB','20101027','陪產假',8.0)
     
    CREATE TABLE #UNPIVOT (Employee char(8),事假 numeric(4,2),病假 numeric(4,2),公假 numeric(4,2),陪產假 numeric(4,2))
    INSERT INTO #UNPIVOT VALUES('AAAAA',15,9,24,NULL)
    INSERT INTO #UNPIVOT VALUES('BBBBB',6,16,0,24)
    

    星期五, 11月 19, 2010

    MEM_BAD_POINTER

    在Windows 7 32 bit 上安裝Auto CAD LT 98後,要開啟時會出現這個錯誤"MEM_BAD_POINTER",按確定就像跑進一個死迴圈,怎麼按都不會結束;搜尋網路上資料,原來Auto CAD LT 97、AutoCAD LT 98 和 AutoCAD R14在 Windows Vista 32 bit 上也會出現。

    Auto CAD LT 98
    • 根據下列步驟去執行就可以在 Windows 7 32 bit 裡順利開起Auto CAD LT 98。
    1.  請先在網路上下載 SHW32.dll,並把名稱改為 SH31W32.dll (SHW32.dll => SH31W32.dll)。
    2.  Program File => AutoCAD LT 98 內找到 SH31W32.dll,備份這個檔案或是改成其他名字(EX:SH31W32_Old.dll),把步驟1的dll檔案複製進來。
    3.  重開 AutoCAD 就可以進入。
      在 Windows 7 64 bit 上,一啟動 setup 馬上就會出現這個 Error,原來AutoCAD LT 98 是16位元,這個實在是無解,只好在Windows 7 64 bit 上利用 DWGTrueView 2010 64 bit 來閱讀,利用XP Mode來執行AutoCAD LT 98來編輯囉。


        備註:
      • 在Windows 7 32 bit 上打開 AutoCAD LT 98 後,並沒有實際使用過(我也不會用),所以無法確定使用上是否有其他問題。
      • 20110428 在 Windows 7 32 bit 上安裝 AutoCAD LT 2000,可正常開啟使用;201105底使用者回報列印上有問題,解決方法請參考 記憶體配置錯誤