如何过滤 SQL EAV 模型中的行?
我得到了一个 EAV SQL 表,其中包含用于显示 GUI 的首选项列表。每个首选项都由表中的一行表示。
我需要过滤这些行,使每个不同的 ColumnName/key 列组合只有一行。如果 ID_UserPersonal
列不为 NULL,则意味着该行代表特定于用户的首选项,该首选项必须优先于默认首选项(当 ID_UserPersonal
为 NULL 时)。在这种情况下,必须过滤掉默认首选项,并为该 ColumnName/key
列组合保留用户定义的首选项。
I got a EAV SQL table which contains a list of preferences used for the display of a GUI. Each preference is represented by a row in the table.
I need to filter these rows to have only one row per different ColumnName/key
column combination. If the ID_UserPersonal
column is not NULL, it means that the row represents a user-specific preference which must have precedence over the default ones (when ID_UserPersonal
is NULL). In that case, the default preference must be filtered out and the user-defined one must be kept for that ColumnName/key
column combination.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以通过
ID_Personal
在非 NULL 值后面放置 NULL 来对行进行排名,然后选择排名值为1
的行,如下所示:请注意
在我的示例中,
子句,以防我在其中添加太多(或者可能太少)列。ROW_NUMBER()
函数的 PARTITION BY参考文献:
排名函数 (Transact-SQL)
ROW_NUMBER (Transact-SQL)
You could rank rows by
ID_Personal
putting NULLs after non-NULL values, then select the rows where ranking values are1
, something like this:Please pay attention to the
PARTITION BY
clause of theROW_NUMBER()
function in my example, in case I added too much (or, perhaps, too few) columns there.References:
Ranking Functions (Transact-SQL)
ROW_NUMBER (Transact-SQL)
以下是您需要的完整示例:
您需要连接唯一标识表中行的字段。
Here is a full example of what you need:
You'll need to make the concatenation of the fields that uniquelly identify a row on your table.