Sql-Server

如何從 EAV 表的視圖中選擇非空列

  • January 15, 2020

我有一個 VIEW 查詢我的 EAV 模型,它使用數據類型表來儲存值。我有一個包含許多屬性的實體,每個屬性可以是不同的數據類型。除了儲存類型之外,DataType 表的結構都相同,它們有 4 列,必需、Min、Max 和 Value(表的相應數據類型)。

我想簡單地得到類似的東西

MyAttributeName、最小值、最大值、值、必需

我有這樣的桌子..

  • $$ Attribute:: Attribute_Id, Name $$ $$ Machine:: Machine_Id, Name $$
  • $$ Attribute_Val_Int :: Id, Attribute_Id, Machine_Id, Min, Max, Value,Required $$
  • $$ Attribute_Val_Dec :: Id, Attribute_Id, Machine_Id, Min,Max, Value, Required $$
  • $$ Attribute_Val_Dat :: Id, Attribute_Id, Machine_Id, Min, Max, Value, Required $$

雖然我可以獲得所有的屬性類型值(在這個例子中我得到了 12 列 - 我只想要具有非空值的 Attribute_Val。我希望列名然後別名為 Min、Max、Val、Required

所以而不是收到這個:

MachineName、MyAttributeName、IntMin、IntMax、IntValue、IntRequired、DecMin、DecMax、DecValue、DecRequired、DatMin、DatMax、DatValue、DatRequired。

我想得到:

$$ MachineName, MyAttributeName, Min, Max, Value, Required $$

想一想

SELECT MachineName, 
      MyAttributeName, 
      COALESCE(IntMin, DecMin, DatMin) ValMin,
      COALESCE(IntMax, DecMax, DatMax) ValMax, 
      COALESCE(IntValue, DecValue, DatValue) ValValue,
      COALESCE(IntRequired, DecRequired, DatRequired) ValRerquired

但似乎您必須將所有單獨的值轉換為相同的數據類型(字元串?)以避免錯誤。

引用自:https://dba.stackexchange.com/questions/257431