0%

前言:

目的:

如果有兩大類模組是多對多的組合,如本次Smaple Code. Nick和Addidas 包包都有紅、藍、黃….或其他顏色

就可能呈現下面6種組合

  • Nick(紅)
  • Nick(藍)
  • Nick(黃)
  • Addidas(紅)
  • Addidas(藍)
  • Addidas(黃)

如果此建立類別的話 可能情況如下面的UNL圖

類別數量 = 顏色數量 * 包包品牌數量

這樣會有兩個問題

  1. 隨著品牌和顏色增多,包包類別數量急速增長 (X = m*n)個
  2. 顏色我們可看做一個抽象 不應當和包包合在一起
Read more »

前言:

之前有和大家分享使用CASE WHEN 搭配聚合函數實現樞紐分析

但今天如果我們要轉換成行的列希望是動態依照目前資料庫的欄位要處理呢?

我們可以使用Dynamic pivot

``Dynamic pivot 核心概念其實是把我們要使用的pivot SQL`語法動態產生出來

程式碼

CREATE TABLE T(
    userName VARCHAR(100),
    Price int,
    Dt DATE
);

INSERT INTO T VALUES ('Tom',100,'2017-01-01');
INSERT INTO T VALUES ('Amy',200,'2017-01-02');
INSERT INTO T VALUES ('Tom',1311,'2017-01-03');
INSERT INTO T VALUES ('Tom',122,'2017-03-01');
INSERT INTO T VALUES ('Tom',111,'2017-04-01');
INSERT INTO T VALUES ('Amy',232,'2017-05-01');
INSERT INTO T VALUES ('Tom',2312,'2017-05-02');
INSERT INTO T VALUES ('Tom',23,'2017-05-03');

DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX);

SET @SQL = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)  
            FROM T 
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');

SET @query = 'SELECT userName,'+@cols+' FROM T GROUP BY userName' ;

EXECUTE sp_executesql @query

因為範例我們使用 SQL SERVER

所以使用 FOR XML PATH 語法將我們** CASE WHEN pivot SQL **語法產生並把他附值給 @cols 變數

SET @cols = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)  
            FROM T 
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
Read more »

前言:

某些專案因為歷史久遠沒有Source Code,但有個需求需要異動裡面的程式該怎麼辦??

難道只能整個反組譯,查看程式碼翻一份做新的嗎?

不~~其實有辦法直接對於DLL進行修改

只需使用 ** Reflexil 搭配 ILSpy 或其他支援的反組譯​軟體 **

Reflexil 是一個組譯編輯器插件目前支援 ReflectorILSpy 和 Telerik’s JustDecompile

下載連結

Reflexil **Release 2.2 搭配 ILSpy version 3.2 


前置動作,安裝

Read more »

之前有介紹 (SQL Server) CTE RECURSIVE (遞迴)製作月曆 在Oracle 有提供一個精簡的語法產生階層資料 CONNECT BY

 CONNECT BY 有幾個常用Key Word.

  1. LEVEL 目前在樹節點第幾階層
  2. START WITH 設定哪筆做為起始點開始樹
  3. PRIOR 用於指定父資料欄位

製造出的階層樹,概念如下

[圖來自Oracle]

範例一

建立連續數字 1~10
<code class="language-sql">SELECT X + LEVEL
FROM (
  SELECT 0 X
  FROM DUAL
 )
CONNECT BY LEVEL <= 10

此範例使用 LEVEL CONNECT BY 上當條件 建立列值到LEVEL 大於等於 10

sqlfiddle

Read more »

前言

本篇利用RabbitMQ client來簡單實現MQ功能.

在RabbitMQ中有很重要兩個角色,ProducerConsumer,下面這個範例使用c# console來實現.

我個人覺得APMQ協議和Http協議有點類似,一樣有Header(Properties),body…等等概念.

Producer Code

一開始我們宣告一個 ConnectionFactory 並設置RabbitMQ Server連接參數

  • UserName:使用者帳號
  • Password:使用者密碼
  • HostName:連接FQDN或IP

RabbitMQ預設密碼是 guest

//建立連接工廠
ConnectionFactory factory = new ConnectionFactory
{
    UserName = "guest",
    Password = "guest",
    HostName = "localhost"
};

呼叫factory.CreateConnection 建立連接RabbitMQ連接物件,並呼叫 CreateModel方法建立一個channel Model

Read more »

前言:

如果目前場景遇到一定流程階段,但流程內容依照邏輯或情境不同也有所不一樣. 這時可以考慮使用樣板模式(TemplatePattern)

生活舉例:

因為十二年國教,所以基本上每個人都有上學的經驗

每天上學最少要經歷下面過程(我做一些簡化)

到學校=>上午上課=>吃午餐=>下午上課=>放學回家

可以看到不管是國小、國中、高中 至少都有上述的過程

但每個過程內容可能會依照年級階段不同,也有所不一樣

例如:

  • 吃中餐:高中可能是吃便當,但國小是吃營養午餐,雖然都是吃飯但內容不一樣。
  • 上午上課:都是教數學,但高中教微積分,國小教加減乘除。
Read more »

在Github這邊要先建立兩個Repository

  1. Blog Code
  2. Blog Hosting

Blog Code

這個Repository是利用Hexo cli樣板來撰寫Blog.

像我目前使用的MyBlog

建立完自己的Code Repository後.

將他clone到自己電腦上面.

執行下面幾個步驟

  1. 打開此Repository資料夾
  2. 打開CMD並進入此資料夾
  3. 利用NodeJS NPMnpm install hexo -g 就會開始下載 img
  4. 執行完第三步後再打Hexo init指令,安裝看建立Hexo將檔案.

Blog Hosting

Read more »

前文:

網路上已經有許多Blog託管平台 例如:Google Blog,痞客邦….為何我還要自己寫這篇跟大家分享?

因為上面提供的平台固然好用,但我並無法100%的去修改我想要的樣式或版面.

如果我想要有100%彈性修改我的Blog我就必須建立自己的網站.

但要給別人Hosting需要另外花一筆費用…

就有本次系列文 Github (hosting) + Hexo (Blog) + Appveyor(CICD)

這個搭配有幾個優點:

  1. 完全免費
  2. 使用MarkDown撰寫Blog就是爽.
  3. 練習使用CICD線上工具.
  4. Hexo有許多不一樣絢麗的Theme可以更換且更換方式簡單

撰寫發布流程大概如下圖

img

Read more »

前文:

在Func和Action泛型委託中 有 In , Out 兩個關鍵字

那到底是神麼意思呢?

讓我們一起看下去….

//Action delegate
public delegate void Action<in T>(T obj);

//fun delegate
public delegate TResult Func<in T, out TResult>(T arg);

上面程式碼我列出ActionFunc 委派方法各其中一個重載

我們可以發現到泛型中有關鍵字 inout 這是代表神麼意思呢?

讓我們繼續看下去…..

解說:

分享前先探討一個問題 泛型是否可以父類別指向子類別

Read more »

前文:

這個文章和大家分享解說 Func<>和Action<>

最後帶著大家來實現自己的Linq Where

先來看 Func<> ,Action<>原始定義

我們發現Func<> ,Action<> 其實本質就是委託 ,雖然有十幾個重載 但大同小異

public delegate TResult Func<out TResult>();

public delegate void Action<in T>(T obj);

Func固定最後一個泛型參數為方法回傳值,其餘是傳入參數

public delegate TResult Func<in T, out TResult>(T arg);

解說Func:

宣告一個Func<Person,string>委託 _thunkCheckAge
_thunkCheckAge委託指向CheckAge方法
執行_thunkCheckAge委託 (執行CheckAge方法)

Read more »