我试图从不同数据库中的表(在同一服务器(2014)和相同的表结构上)中提取一组数据并将其放在视图中。我已经找到了几个关于集合排序和联合的讨论,但是我在弄清楚结果集本身时遇到了一些问题。这是脚本:
CREATE VIEW OrderCheck (Source, [Order No], [Date], FirstName) as
SELECT Top 2 'Set1', Order_No, format(Order_Date,'g'), First_Name
FROM db1.dbo.Orders
Union all
SELECT Top 2 'Set2', Order_No, format(Order_Date,'g'), First_Name
FROM db2.dbo.Orders
Union all
SELECT Top 2 'Set3', Order_No, format(Order_Date,'g'), First_Name
FROM db3.dbo.Orders
ORDER BY Order_No desc
如果我自己运行select / union查询,我会得到这些结果,这就是我想要的结果:
Set3 60098 9/14/2016 8:32 AM Lydia
Set3 60097 9/13/2016 12:28 PM Jeané
Set1 30098 9/19/2016 4:12 PM Joshua
Set1 30097 9/19/2016 1:35 PM Cynthia
Set2 11050 9/20/2016 9:24 AM Lorrie
Set2 11049 9/19/2016 11:12 PM Dawnisha
但是当我使用视图(从OrderCheck中选择*)时,我得到了这个:
Set1 10011 11/14/2013 9:13 AM Jaime
Set1 10012 11/14/2013 9:54 AM Eric
Set2 10011 11/14/2013 9:13 AM Jaime
Set2 10012 11/14/2013 9:54 AM Eric
Set3 60098 9/14/2016 8:32 AM Lydia
Set3 60097 9/13/2016 12:28 PM Jeané
最后,如果我在视图内部或外部运行查询但没有任何“order by”,我会得到这个:
Set1 10011 11/14/2013 9:13 AM Jaime
Set1 10012 11/14/2013 9:54 AM Eric
Set2 10011 11/14/2013 9:13 AM Jaime
Set2 10012 11/14/2013 9:54 AM Eric
Set3 10011 11/14/2013 9:13 AM Jaime
Set3 10012 11/14/2013 9:54 AM Eric
因此,您可以在视图中看到,设置1行会替换除字符串文字之外的第2行。如果没有“order by”,则set 1将替换set 2 和 set 3.“Union All”vs“Union”没有区别,也没有请求TOP行的数量。对我来说似乎很奇怪,但我希望有一个合乎逻辑的解释,即使我的研究,我只是缺席了。
非常感谢你! 吉姆凯莱赫
答案 0 :(得分:1)
除非您使用外部订单
,否则无法保证订购hasOwnProperty
保证订单
以下是来自Itzik Ben-Gan
的报价视图中的ORDER BY子句(使用Top *时)仅保证 为TOP选项提供逻辑过滤目的。如果查询视图但未指定 外部查询中的ORDER BY子句,不保证呈现顺序
根据这篇文章,前100%也是有害的。TOP 100 Percent ORDER BY Considered Harmful。
*强调我的
答案 1 :(得分:0)
TOP 2
履行两个完全不同的角色 - 它可以定义结果集的排序顺序,也可以完成其他功能的定义,例如ORDER BY <Result set sorting criteria>
或ORDER BY
。有时它可能同时完成这两个角色。
这是您查询的另一种表述:
TOP
您可以在此明确指出应选择每个dependencies {
wearApp project(':Wearable')
的标准。但是,如果您在视图中使用它,则会省略最终public abstract class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
Debug.Write($"--- CLASS ViewModel Called OnPropertyChanged for object: {propertyName} -------- \n");
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
,因为视图无法指定结果集排序条件。充其量,您可能会强制服务器接受此类namespace WPFApplication.Ui
{
public class AccentColorMenuData
{
public string Name { get; set; }
public Brush BorderColorBrush { get; set; }
public Brush ColorBrush { get; set; }
private ICommand changeAccentCommand;
public ICommand ChangeAccentCommand
{
get { return this.changeAccentCommand ??
(changeAccentCommand = new SimpleCommand { CanExecuteDelegate = x => true, ExecuteDelegate = x => this.DoChangeTheme(x) }); }
}
protected virtual void DoChangeTheme(object sender)
{
var theme = ThemeManager.DetectAppStyle(Application.Current);
var accent = ThemeManager.GetAccent(this.Name);
ThemeManager.ChangeAppStyle(Application.Current, accent, theme.Item1);
}
}
public class AppThemeMenuData : AccentColorMenuData
{
protected override void DoChangeTheme(object sender)
{
var theme = ThemeManager.DetectAppStyle(Application.Current);
var appTheme = ThemeManager.GetAppTheme(this.Name);
ThemeManager.ChangeAppStyle(Application.Current, theme.Item2, appTheme);
}
}
public class RemoteSystemsViewModel : ViewModel
{
public List<AccentColorMenuData> AccentColors { get; set; }
public List<AppThemeMenuData> AppThemes { get; set; }
public RemoteSystemsViewModel()
{
// create accent color menu items for the demo
this.AccentColors = ThemeManager.Accents
.Select(a => new AccentColorMenuData() { Name = a.Name, ColorBrush = a.Resources["AccentColorBrush"] as Brush })
.ToList();
// create metro theme color menu items for the demo
this.AppThemes = ThemeManager.AppThemes
.Select(a => new AppThemeMenuData() { Name = a.Name, BorderColorBrush = a.Resources["BlackColorBrush"] as Brush, ColorBrush = a.Resources["WhiteColorBrush"] as Brush })
.ToList();
}
}
}
子句的存在,但它不会提供任何实际保证。
从您的问题中不清楚每个public partial class ConfigurationView : UserControl
{
private readonly RemoteSystemsViewModel _viewModel;
public RemoteSystemsView()
{
_viewModel = new RemoteSystemsViewModel();
InitializeComponent();
DataContext = _viewModel;
}
void SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
}
定义的实际标准应该是什么。