以下是显示使用密钥“3500”的客户的查询。但表中还有其他键。 我试图找出以下客户使用的其他密钥(除了3500)。 对于任何建议都会很棒!!
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
namespace ExampleNestedGrid
{
public class RefreshCommand : ICommand
{
private ObservableCollection<Document> Documents;
private System.Windows.Controls.DataGrid MainGrid;
#region public methods
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
#endregion
#region public methods
public RefreshCommand(ObservableCollection<Document> Documents, System.Windows.Controls.DataGrid MainGrid)
{
// TODO: Complete member initialization
this.Documents = Documents;
this.MainGrid = MainGrid;
}
public void Execute(object parameter)
{
Documents.First().LinkedEmployees.First().Status = !Documents.First().LinkedEmployees.First().Status;
ICollectionView view = CollectionViewSource.GetDefaultView(Documents);
view.Filter = (item) => item != null;
MainGrid.ItemsSource = view;
var childGrids = FindVisualChildren<DataGrid>(MainGrid);
foreach (DataGrid childGrid in childGrids)
{
MessageBox.Show(childGrid.Name);
}
}
public bool CanExecute(object parameter)
{
return Documents != null && MainGrid != null;
}
#endregion
private static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
}
}
结果:(以上列表仅为使用“3500”与其他产品密钥组合使用的客户)
SELECT distinct(b.id2)
FROM tab1 as a, tab2 as c, tab3 as b
WHERE a.id1 = c.id1 and c.id2 = b.id2
group by b.id2
having count
(
case
when key in (3500)
then 1
end
) > 0
id2 key
123 3500
123 3501
123 4100
234 3500
234 1234
234 4100
312 3500
312 4100
答案 0 :(得分:0)
在不知道基础表的结构的情况下,不可能给出最具体的答案,但这里应该有效:
with t as (
SELECT *
FROM
tab1 as a
INNER JOIN tab2 as c ON c.id1=a.id1
INNER JOIN tab3 as b ON b.id2=c.id2
),
custkeys as (
select distinct id2, key
from t
),
cust3500 as (
select distinct id2
from custkeys
where key = 3500
)
select
key,
count(*) as customers
from
custkeys as k
inner join cust3500 as c on c.id2=k.id2
where
key <> 3500;
custkeys
CTE可能是不必要的,或者可能被更简单的东西替换,cust3500
CTE也可能会被更改,具体取决于表的实际结构。