亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TSQL 將表中的一列轉置為一行

TSQL 將表中的一列轉置為一行

C#
揚帆大魚 2022-07-23 16:34:40
我有一個臨時表,其中一列包含 3 條數據:Code、Date和Quantity.例子:-------FR12345624/02/1988500我需要將此列中的數據提取到單獨的列中。例子:Code     | Date       | Quantity---------  -----------  ---- FR123456 | 24/02/1988 | 500我使用了這段代碼:SELECT [1], [2], [3]FROM  (    SELECT row_number() OVER (ORDER BY splitdata DESC) AS Id, splitdata      FROM splitdata ) AS SourceTable  PIVOT  (      MIN (splitdata)    FOR id IN ([1], [2], [3])  ) AS PivotTable;它的問題是一旦數據內容發生變化,由于聚合函數(MIN),我可能會將數量內容放入日期列。
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

我認為這是與 SQL-Server 相關的......


您的問題是:SQL-Server 表沒有任何類型的隱式排序順序。一個簡單SELECT * FROM SomeWhere的可以按照您插入數據的排序順序返回,但也可以返回完全不同的。確保排序順序的唯一機會是ORDER BY針對(一組)唯一列的最外層查詢。


您可以通過分析數據來創建排序順序:


這是一個包含您的測試數據的模型表:


DECLARE @mockup TABLE(YourColumn VARCHAR(100));

INSERT INTO @mockup VALUES

  ('FR123456')

 ,('24/02/1988')

 ,('500');

--查詢將檢查值是否可以轉換為數字、日期。

--這將用于對值進行排序。

--我使用105inCONVERT來強制執行日期格式dd-MM-yyyy


 SELECT CASE WHEN TRY_CONVERT(DATE,YourColumn,105) IS NOT NULL THEN 2

             ELSE CASE WHEN TRY_CAST(YourColumn AS INT) IS NOT NULL THEN 3 ELSE 1 

                  END 

        END AS SortOrder

        ,YourColumn

 FROM @mockup

 ORDER BY SortOrder;

但是,如果您的表中有幾個三胞胎,而不僅僅是您的樣本中的一個,恐怕您會迷路...


順便說一句:你自己的方法試圖做同樣的事情:


SELECT row_number() OVER (order by splitdata desc)as Id

這將創建一種排序順序號,但它將是隨機的(數量將根據字母數字規則出現在日期之前或之后)。


暗示

在表中添加一IDENTITY列。這將在任何行創建時使用越來越多的數字。這些值可用于強制執行插入的順序(通過ORDER BY與此列一起使用)。


更新:您的查詢

 SELECT [1], [2] , [3]

    FROM  

    (SELECT CASE WHEN TRY_CONVERT(DATE,splitdata,105) IS NOT NULL THEN 2

             ELSE CASE WHEN TRY_CAST(splitdata AS INT) IS NOT NULL THEN 3 ELSE 1 

                  END 

        END AS Id , splitdata  

    from @mockup ) AS SourceTable  

    PIVOT  

    (  

    MIN (splitdata)

    FOR id IN ([1], [2], [3])  

    ) AS PivotTable;


查看完整回答
反對 回復 2022-07-23
  • 1 回答
  • 0 關注
  • 110 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號