选择列作为行Oracle SQL?

时间:2015-08-12 11:29:02

标签: sql pivot-table

我有桌子(医疗发票)加上5个外键
每行都有这些FK的一个值,如下所示:

    ID   PDL_ID   LTT_ID   MSF_ID   RIY_ID   ORN_ID   AMOUNT
    1    null     1        null     null     null     20.00
    2    null     null     1        null     null     15.00
    3    1        null     null     null     null     10.00
    4    null     null     3        null     null     18.00

我希望结果像这样

    col1(IDs)  col2(values)   col3(Amount)   
    PDL_ID      1             10
    LTT_ID      1             20
    MSF_ID      1             15
    MSF_ID      3             18

2 个答案:

答案 0 :(得分:0)

一种简单的方法是使用 public class ImageConverter: IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { MemoryStream ms = new MemoryStream(); ((System.Drawing.Bitmap)value).Save(ms, System.Drawing.Imaging.ImageFormat.Png); BitmapImage image = new BitmapImage(); image.BeginInit(); ms.Seek(0, SeekOrigin.Begin); image.StreamSource = ms; image.EndInit(); return image; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion }

union all

如果您有大量的数据,还有其他方法不需要读取每列的表格。

答案 1 :(得分:0)

在Oracle 11g及更高版本中,您可以使用运算符unpivot

select col1, col2, amount from invoice
  unpivot (col2 for col1 in ("PDL_ID", "LTT_ID", "MSF_ID", "RIY_ID", "ORN_ID"))

SQLFiddle demo