根据客户连接/转换多行#

时间:2017-06-22 18:48:14

标签: sql-server-2008-r2

我目前有一份报告,其中包含将在下周进行的工作的客户列表。

目前,当报表运行时,我们会生成一个客户列表,要执行的工作日期,工作类型及其电子邮件地址。

许多这些客户在整个星期都会执行多项服务,因此会在报告中多次出现。

我想将列表中多次出现的客户端组合起来,如下所示:

  

我们目前的情况:

public class TrophyActivity extends AppCompatActivity {

public static final String PREFS = "examplePrefs";
Button btn_back, btn_exit;
TextView tv_congrats, tv_received, tv_trophyName, tv_trophy;
ImageView iV_trophy;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_trophy);

    btn_back = (Button) findViewById(R.id.btn_back);
    btn_exit = (Button) findViewById(R.id.btn_exit);
    tv_congrats = (TextView) findViewById(R.id.tv_congratulations);
    tv_received = (TextView) findViewById(R.id.tv_received);
    tv_trophyName = (TextView) findViewById(R.id.tv_trophy_name);
    tv_trophy = (TextView) findViewById(R.id.tv_trophy);
    iV_trophy = (ImageView) findViewById(R.id.iV_trophy);

    SharedPreferences example = getSharedPreferences(PREFS, MODE_PRIVATE);
    int valueString = example.getInt("userValue", 0);

    if (valueString<=25){
        tv_trophyName.setText("Beginner");
        iV_trophy.setImageResource(R.drawable.ic_beginner);
    }else if (valueString<=50){
        tv_trophyName.setText("Intermediate");
        iV_trophy.setImageResource(R.drawable.ic_ntermediate);
    }else if (valueString<=75){
        tv_trophyName.setText("Semi Jumbo");
        iV_trophy.setImageResource(R.drawable.ic_semi_jumbo);
    }else if (valueString<=100){
        tv_trophyName.setText("Jumbo");
        iV_trophy.setImageResource(R.drawable.ic_jumbo);
    }

    btn_back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TrophyActivity.super.onBackPressed();
        }
    });

    btn_exit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            moveTaskToBack(true);
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(1);
        }
    });

  }
}
  

我们想要什么:

Cust ID  FName LName       Date      Description
   1     Jon   Smith     01/01/17   Spring Cleanup
   1     Jon   Smith     01/03/17   Lawn Maintenance
   1     Jon   Smith     01/05/17   Irrigation
   2     Jane  Roberts   01/02/17   Spring Cleanup
   2     Jane  Roberts   01/03/17   Lawn Maintenance
   3     Jim   Whoever   01/04/17   Turf

到目前为止,这是我们的代码:

Cust ID  FName Lname       Date       Description
   1     Jon   Smith     01/01/17    Spring Cleanup, Lawn Maintenance, Irrigation
   2     Jane  Roberts   01/02/17    Spring Cleanup, Lawn Maintenance
   3     Jim   Whoever   01/04/17    Turf

感谢您提前获得任何帮助,因为我对SQL非常陌生并感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是模拟GROUP CONCAT。

Select 
    cust.CustID,
    cust.CustName, 
    cust.FirstName, 
    cust.LastName, 
    cust.Email, 
    wo.ShortDesc,
    Min(wos.StartTime) as StartTime, 
    --br.Description Branch
    Branch = STUFF((
                  SELECT ',' + md.Description
                  FROM dbo.Branches md
                  WHERE br.LocationID = md.LocationID
                  FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
From 
    WorkOrderSchedules wos Join
    WorkOrders wo On wo.SvcOrderID = wos.SvcOrderID Join
    Customers cust On cust.CustID = wo.CustID Join
    Branches br On br.LocationID = wo.LocationID

Where 
  wos.StartTime Between DateAdd(wk, 2, DateAdd(wk, DateDiff(wk, 7,
  GetDate()), -1)) And DateAdd(wk, 2, DateAdd(wk, DateDiff(wk, 7, GetDate()),
  5)) And cust.CustName Not Like 'Three C%' And wo.ShortDesc Not Like
  'sales lead' And wo.ShortDesc Not Like '%lawn main%' And
  cust.CustName Not Like 'Port' And cust.CustName Not Like '31 Mile%' And
  cust.CustName Not Like '32 Mile' And cust.CustName Not Like 'Quail Ridge' And
  cust.CustName Not Like 'Hayes' And cust.CustName Not Like 'Inla' And
  cust.CustName Not Like 'Eaton' And cust.CustName Not Like 'Fisher' And
  cust.CustName Not Like 'Pasadena' And cust.CustName Not Like 'Mallard'
group by
    cust.CustID,
    cust.CustName, 
    cust.FirstName, 
    cust.LastName, 
    cust.Email, 
    wo.ShortDesc,