如何在" select"中重用相同的语句。 " group by"条款?

时间:2016-10-04 03:47:49

标签: sql sql-server

我尝试使用字符串函数substring()和charindex()获取所有电子邮件地址的域名,然后将其分组并计算具有相同域名的电子邮件数量。

我的查询:

substring(Email, charindex(@SearchTerm, Email) + 1, len(Email))

但正如您所看到的,"组中使用的语句由"子句与我在&#34中使用的子句相同;选择"声明。它有点长,我不想写下两次。所以我只是想知道是否有一种方法我只能写std::cin >> number; getchar(); 一次,但仍能达到相同的效果?

我的表:

enter image description here

结果:

enter image description here

3 个答案:

答案 0 :(得分:3)

public partial class ProgressBarViewModel : INotifyPropertyChanged{
int _completion;
    public int Completion
    {
        get { return _completion; }
        set
        {
            _completion = value;
            Notify("Completion");
        }
    }

private string _fileCopied;
public string FileCopiedString
{
    get { return _fileCopied; }
    set
    {
        _fileCopied = value;
        Notify("FileCopiedString");
    }
}

public void ChangeCompletion(int Value, string file)
{
    Completion = Value;
    FileCopiedString = FileCopiedString + file;
}

public event PropertyChangedEventHandler PropertyChanged;

public void Notify(string name)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

答案 1 :(得分:1)

WITH t AS ( SELECT SUBSTRING(email,3,LEN(email)) AS emaildomain 
FROM tblresident )
SELECT emaildomain,COUNT(*)
FROM t
GROUP BY emaildomain; 

答案 2 :(得分:-1)

首先,如果您想要J.comJ和K@J.com的J.com一次;意味着你必须用表达式进行分组,那么你所做的就是最好的方法。

另一方面,如果你想从J@J.com和K@J.com两次获得J.com,那么你可以这样做;

SELECT substring(Email, charindex(@SearchTerm, Email) + 1, len(Email)) as [Email Domain],
COUNT(Email) as Total 
FROM tblResident 
GROUP BY Email