Como girar? Como converter várias linhas em uma linha com várias colunas?

Eu tenho duas tabelas que quero combinar. A primeira tabela é com clientes e a outra com produtos. Atualmente eu tenho 22 produtos, mas eu quero ter um projeto de banco de dados flexível, então em vez de ter 22 colunas no produto DB, eu tenho 1 linha para cada produto para cada cliente, então se eu adicionar ou remover 1 produto no geral, eu não tem que mudar a estrutura do banco de dados.

Eu quero ter uma declaração select onde eu seleciono todos os produtos para cada cliente e a saída deve estar em uma única linha com uma coluna para cada produto.

Eu vi algumas outras questões que são semelhantes, mas o objetivo é ter todas as linhas concatenadas em uma coluna, o que eu não quero.

Assumindo 2 clientes e 3 produtos.

Cliente de tabela:

ClientId | ClientName
---------------------
 1       | Name1
 2       | Name2

Produtos de mesa

ProductId | ClientId | Product
-------------------------------------
 1        |   1      |  SomeproductA
 2        |   1      |  SomeproductB
 3        |   1      |  SomeproductA
 4        |   2      |  SomeproductC
 5        |   2      |  SomeproductD
 6        |   2      |  SomeproductA

A saída deve ser algo como:

Saída de tabela:

 ClientId | ClientName | Product1     | Product 2    | Product 3
 -------------------------------------------------------------------
     1    | Name1      | SomeproductA | SomeproductB | SomeproductA
     2    | Name2      | SomeproductC | SomeproductD | SomeproductA

A solução perfeita também seria flexível no sentido de que a instrução select deveria contar o número de produtos distintos para cada cliente (eles sempre serão os mesmos para todos os clientes), de modo que se eu adicionar ou remover um produto para todos os clientes, não deve alterar a instrução de seleção.

questionAnswers(1)

yourAnswerToTheQuestion