SQLの基本 - 新しい出力フィールドを作成します。

まず、新しい出力フィールドを作成

図1に示すように、テーブルの構築、挿入データ

### 
CREATE TABLE `t_stock_trans_dtl`(
  ` trans_id` VARCHAR( 100)NOT NULL COMMENT 'トランザクションのシリアル番号' 
  `stock_name` VARCHAR( 20)NOT NULL DEFAULT '' COMMENT '共有名' 
  ` stock_code` VARCHAR( 10) NOT NULL DEFAULT '' COMMENT 'ティッカー' 
  `opt_tm`日時NOT NULL DEFAULT '1900-01-01 00:00:00' COMMENT '時間を操作する' 
  ` opt_typ` VARCHAR( 10)NOT NULL DEFAULT '' COMMENT "操作タイプ' 
  `price`進( 18,2)NOT NULL DEFAULT' 0.00 'COMMENT'一価' 
  ` volume`のint型(11)NOT NULL DEFAULT' 0 'COMMENT'番号」
  `fee`小数(18,5)NOT NULL DEFAULT '0.00000' COMMENT ' 手数料' 
  PRIMARY KEY( `trans_id`)
)ENGINE = MyISAMテーブルDEFAULT CHARSET = GBK COMMENT = '株式取引の詳細; 


### 
INSERT VALUES t_stock_trans_dtl` INTO`  ' 20,010,406,000,023 '' Hongdu航空'' sh600316 '' 2001-04-06 10時42分34秒'' 買う'22.40,600,3.36000 
)、( '20050826000303'、' Hongdu航空'' sh600316 '' 2005-08-26夜一時40分31秒' ' 販売'、6.98、-300,5.00000 )、  '20130301000933'、' BYD '' sz002594 '' 2013年3月1日 09: 33:36 ''買う'25.25,600,3.78750 )、  '20140307000393'、' BYD '' sz002594 '' 2014年3月7日 13:39:30 ''購入」、56.91,600,8.53650 )、 '20150508000075'、 'Hongdu航空'、 'sh600316'、 '2015年5月8日午前10時47分54秒'、 ' 販売'、36.66、-300,2.74950 )、  '20150724000395'、 'BYD' ' sz002594 '' 2015年7月24日13時19分55秒' ' 買う'、55.55,1200,16.66500 )、  '20150902000941'、'ゆう水'' sz300021 '' 2015年9月2日9時44分18秒''購入'11.41,6100,17.40025 )、  '20160318000314'、'ゆう水'' sz300021 '' 2016年3月18日午後01時01分44秒'' 販売'12 0.62、-3000,9.46500 )、  '20160930000303'、 'BYD'、 'sz002594'、 '2016年9月30日午後01時40分31秒'、 ' 販売'、56.98、-2400,34.18800 )、 '20170310000425'、 'BYD'、 'sz002594'、'2017年3月10日午後二時22分54秒'、 '購入'、51.59,2000,25.79500 )、  '20170630000132'、 'ゆう水'、 'sz300021を'、「2017年6月30日 11時53分:20 ''、「7.87,1300,2.55775を買います)、'20171110000142'、 'ゆう水'、 'sz300021'、 '2017年11月10日午前11時44分24秒'、 ' 購入'、7.25,5000,9.06250 )、  '20171229000410'、 'BYD' ' sz002594 '' 2017年12月29日午後2時51分04秒」、 ' )' 61.88,3600,55.69200を購入。


図2に示すように、数値計算

たとえば、次の
    手(1ロット変換する方法共有データベースのユニット数、 = 出力した後に100株)?
    TRANS_ID SELECT、stock_name ,.価格、ボリューム、ボリューム / 100 t_stock_trans_dtl FROM; 

    株式取引テーブルの単価、数量は、取引の額を計算する方法?
    TRANS_ID SELECT、stock_name ,.価格、ボリューム,.価格 *のボリュームt_stock_trans_dtl FROM、


SQL算術演算子:
     +      加算
     -      減算
     *      乗算
     /      加算

演算の演算子の優先順位:
    及び演算に記載の

    SELECT A -b * C / Dの1 +それSELECTと等価である- +1((b *表 C)/ D) 
    ラップされた()を提案


算術演算子の結果を:
    フィールド(INT) = 1件の。
    フィールドB(INT) = 4。
    SELECT A/ B#が0.2500を返し、特定のデータベースにも0を返し、

0を返すどのように 25を
    SELECT * 1.00 / B 


算術演算子は、数値フィールドをサポートし、

どのように文字フィールドの算術演算?
    変換数字、再計算


3、フィールドスプライシング

例:
    どのように「Hongdu航空(sh600316)」をマスコミに名前と株式ティッカーシンボルを示して?

アクセス、SQL Serverで:
    SELECT stock_name + '(' + stock_code + ')' t_stock_trans_dtl FROM; 

のTeradataでDB2やOracle、:
    SELECT stock_name || '(' || || stock_code ')' t_stock_trans_dtl FROM; 

MySQLで:
    SELECT CONCAT(stock_name、 '('、stock_code、 ')' )t_stock_trans_dtl FROM; 


スプライシングオペレータが唯一の文字フィールドをサポートしています。

どのようにスプライシング数値フィールド?
    数字に変換され、その後、スプライシング


エイリアスを使用して4、

CONCAT SELECT(stock_name、「(」、stock_code、「)」)t_stock_trans_dtl FROM; 

別名があるかもしれませんただ、スプライシングフィールドをチェックし、ヘッダ名は、読みやすいではありません。


ASキーワード表現エイリアスを使用:
    SELECT CONCAT(stock_name、 '('、stock_code、 ')' t_stock_trans_dtl FROM証券AS); 

    SELECT CONCAT(stock_name、 '('、stock_code、 ')') '株式名とコード' AS t_stock_trans_dtl FROM; 

提案:かどうか、中国の別名スペースがあるが、引用符で囲まれています


第二に、新しい出力フィールド(ケース)を作成

図1に示すように、ケース場合

例:
    どのように数が多く、単一の、単一、小型のシングルを区別するために、購入しますか?
    
      [ 3000、+ ∞)は、単一の大型 300,3000 単一) 0300 】スタジオ

    SELECT巻、
    CASE巻 > = 3000 THEN '大きなもの'  
         ボリューム >ボリューム300 AND <3000は、次に'単'  
         ボリューム <= 300 THEN「メーカー」 
    AS END「のシングルタイプ」
    t_stock_trans_dtl FROM 
    WHERE opt_typ =「買う」; 

##他のキーワード
    SELECTボリューム、
    CASEを巻 > = 3000 THEN「大きなもの」 
         ボリューム > 300ボリューム<3000 THEN "'小シングル'  
    END 
    t_stock_trans_dtl FROM 
    WHERE opt_typ = '購入';


2、CASE WHEN構文1

### CASE WHEN構文1:

    THEN CASE式1 WHEN発現を生じた条件1。
              2は、条件式N Nの発現の結果THEN条件式2の発現...結果WHEN 
    [ELSEは、ELSE式結果] 
    END 

    ないELSEをすべての条件式が満たされない場合は、部分的な、それはNULLを返します。
    それぞれのCASE ELSE分岐を有していなければなりません!

例:
    購買取引について、取引の数が正の数であり、取引を販売し、トランザクションの数は負です。これは、取引金額(取引価格につながる *のトランザクションの数)正と負の両方の値を返します。
    どのように取引の種類に応じた変換は、すべての取引金額は正の数を返すのですか?

    取引価格で購入 *のトランザクションの数
    販売      0-取引価格* トランザクションの数

    SELECT opt_typ ,.価格、ボリューム、
    CASE opt_typ = '買い'を。価格* ボリュームを
              WHEN opt_typ = '売り' THEN-0。価格* ボリューム
    ELSE 0を
    END 
    t_stock_trans_dtl FROM。

    ##另一种写法
    opt_typ SELECT、価格、数量、
    CASE opt_typ '买入' THEN価格* ボリューム '卖出' THEN 0-価格* ボリューム
    ELSE 0 
    END 
    t_stock_trans_dtl FROM。


3、CASE WHEN構文2

### CASE WHEN構文2:

    CASE条件式
              。式の結果が一致式1 THEN 
              2が一致発現式2をもたらす
              ... 
              THEN式一致式N Nを得WHEN 
    [式ELSE ELSE結果式] 
    ENDの

    結果が条件式に適用され、それは網羅的なリストです。
    しかし、ない条件式の結果のために状況の範囲です。


図4に示すように、ネストされたCASE

CASE WHEN THEN外側の条件式1(CASE WHEN THEN条件式1式の結果の内層の内層。1 
                                   ... 
                                   インナーインナー条件式の結果式M M THEN 
                                   得ELSE ELSE内発現
                                   END )
     ... 
     条件式外層得られた発現N N THEN 
     ELSE ELSE外側発現結果
END 

構文の2種類のネスト、ネストが、推奨しないことができます。
我々は2つのネストされた括弧形式までをお勧めしますし、SQL文を使用します。

おすすめ

転載: www.cnblogs.com/weiyiming007/p/11428796.html